Wikibooks
dewikibooks
https://de.wikibooks.org/wiki/Hauptseite
MediaWiki 1.47.0-wmf.9
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
Assembler-Programmierung für x86-Prozessoren/ Der Prozessor
0
5061
1088547
956366
2026-07-02T09:27:24Z
Gebu
27433
/* x86-64-Architektur */ weniger umgangssprachlich
1088547
wikitext
text/x-wiki
<noinclude>
{{Vorlage:Navigation Reihe|../#Inhaltsverzeichnis|Assembler-Programmierung für x86-Prozessoren}}
</noinclude>
== Die 80x86-Prozessorfamilie ==
Direkt nach dem Einschalten des PCs befindet sich jeder x86-Prozessor im 8086-Kompatibilitätsmodus, dem sog. Real-Mode. Deshalb beginnen wir mit der Betrachtung dieses Urahns der x86-Architektur, da alles, was seine Programmierung und Architektur betrifft, noch immer Gültigkeit besitzt.
=== Der 8086 und 8088 ===
Der 8086 ist ein 16-Bit-Prozessor. Er wurde 1978 vorgestellt und basiert auf seinen 8-Bit Vorgängern, dem 8080 und 8085. Dies hat Folgen z.B. bei der Speicheradressierung oder dem Registersatz.
Der 8088 ist aus Programmierersicht identisch mit dem 8086, wurde allerdings als Low-Cost-Variante des 8086 für den Einsatz mit älterer 8-Bit-Hardware entworfen. So kann der 8086 mit einem Speicherzugriff 16 Bit Daten übertragen, der 8088 nur 8 Bit. Die Aufteilung eines 16-Bit-Speicherzugriffs auf zwei 8-Bit-Zugriffe erfolgt automatisch durch die Hardware des 8088, der Programmierer merkt davon nichts. Dadurch ist die Rechenleistung des 8088 geringer als die des 8086.
==== Die Register ====
[[Datei:Register 8086.PNG|miniatur|300px|Registersatz der 8088/86-CPU]]
Ein Register ist ein sehr schneller Speicherplatz im Prozessor, auf den Befehle direkt zugreifen können. Da Register relativ viel Platz auf dem Silizium belegen, besitzen grade ältere Prozessorarchitekturen meist sehr wenige davon. Je mehr Register ein Prozessor beinhaltet, desto mehr Zwischenwerte können während des Programmablaufes direkt im Prozessor gehalten werden. Dadurch sind weniger langsame Zugriffe auf den Arbeitsspeicher nötig und die Rechenleistung steigt. Die Register des 8086 sind alle 16 Bit breit, dies ist kennzeichnend für eine 16-Bit-Architektur.
Die Register können in verschiedene Typen unterteilt werden:
* Allzweck-Datenregister sind in der Regel universell einsetzbar und nehmen Operanden auf.
* Indexregister werden für die indirekte Adressierung verwendet, können jedoch auch wie Allzweckregister genutzt werden.
* Stackregister werden für die Verwaltung des Stacks benötigt. Der Stack ist eine Datenstruktur, auf der der Inhalt einzelner Register wie auf einem Stapel vorübergehend abgelegt werden können. Dies ist vor allem bei Unterprogrammaufrufen oder Interrupts nützlich.
* Spezialregister werden vom Prozessor intern benutzt und sind kaum durch den Programmierer beeinflussbar. Der Programmierer kann sie meist nur indirekt ändern.
* Segmentregister spielen eine besondere Rolle bei der Speicherverwaltung. Ihre Funktion wird im Abschnitt zur Speicheradressierung beschrieben.
===== Die Allzweckregister =====
Der 8086 ist mit vier Allzweckregistern ausgestattet.
* AX - Das Akkumulator-Register
* BX - Das Basis-Register
* CX - Das Counter-Register
* DX - Das Data-Register
Eine Besonderheit dieser Register ist, dass sie auch als Teilregister mit je 8 Bit benutzt werden können. So lässt sich das Low-Byte von AX, also die Bits Null bis Sieben, als AL ansprechen, das High-Byte heißt AH. '''Das funktioniert nur mit den Registern AX, BX, CX und DX, mit keinem anderen!'''
Auch wenn diese Register für fast alle Operationen verwendet werden können, spielen sie bei bestimmten Befehlen eine Sonderrolle. So wird das AX-Register häufig von arithmetischen Befehlen benutzt, das CX-Register dagegen ist bei der Assemblerversion von FOR-Schleifen der Schleifenzähler. Das BX-Register wird häufig im Zusammenhang mit indirekter Adressierung genutzt und das DX-Register erweitert bei bestimmten Befehlen das AX-Register auf die doppelte Breite.
Ein schönes Beispiel für so einen Befehl ist MUL. Der Befehl MUL BX etwa multipliziert AX mit BX und speichert das Ergebnis in dem Registerpaar DX:AX. In DX steht der höherwertige Teil des Ergebnisses, in AX der niederwertige. Der MUL-Befehl verwendet immer AX oder AL als einen Operanden der Multiplikation.
===== Die Indexregister =====
Es gibt zwei Indexregister, SI, den Source-Index und DI, den Destination-Index. Diese Register sind besonders für die Benutzung mit Stringbefehlen optimiert. String meint hier nicht unbedingt eine Zeichenkette sondern steht allgemein für Arrays. In den Datenblättern sind sie jedoch entsprechend benannt. Diese Register können auch wie Allzweckregister verwendet werden.
===== Die Stackregister =====
Die Stackregister bestehen aus dem Stacksegmentregister SS, dem Stackpointer SP und dem Basepointer BP. SS wird bei den Segmentregistern erläutert. SP zeigt immer auf die Spitze des aktuellen Stapelspeichers, BP ist nützlich bei der Parameterübergabe per Stack und kann sonst auch als weiteres Universalregister verwendet werden. Näheres zum Stack im entsprechenden Kapitel.
===== Der Instruction Pointer =====
Der Instruction-Pointer, kurz IP, enthält immer die Adresse des nächsten auszführenden Befehls und wird automatisch weitergezählt. Er wird nur durch Sprungbefehle und Unterprogrammaufrufe neu geladen, ansonsten kann auf ihn nicht zugegriffen werden.
===== Die Flags=====
Das Flag-Register enthält Status- und Steuerbits des Prozessors, die sog. Flags. Diese Bits zeigen bestimmte Vorkommnisse im Prozessor an, etwa ob das Ergebnis der letzten arithmetischen Operation Null war, und werden von bedingten Sprungbefehlen ausgewertet. Einige andere Flags können bestimmte Funktionen des Prozessors steuern. Ein gesetztes Flag hat den Wert Eins, ein gelöschtes den Wert Null. Bedingte Sprünge entsprechen in etwa if-Anweisungen.
Die Flags im Einzelnen:
[[Datei:Flagregister.PNG|400px]]
* Bit 11 – ''Overflow Flag'' (OF)
* Bit 10 – ''Direction Flag'' (DF)
* Bit 9 – ''Interrupt Flag'' (IF)
* Bit 8 – ''Trap Flag'' (TF)
* Bit 7 – ''Sign Flag'' (SF)
* Bit 6 – ''Zero Flag'' (ZF)
* Bit 4 – ''Auxiliary Flag'' (AF)
* Bit 2 – ''Parity Flag'' (PF)
* Bit 0 – ''Carry Flag'' (CF)
====== Das Carry Flag (Bit Nr. 0)======
Das Carry Flag wird gesetzt, wenn das Ergebnis einer Operation zu einem Werteüberlauf geführt hat, also wenn das Ergebnis größer als die größte darstellbare Zahl war oder kleiner als die Kleinste. Es wird auch gerne benutzt, um anzuzeigen, dass in einer Unterfunktion ein Fehler aufgetreten ist.
====== Das Parity Flag (Bit Nr. 2) ======
Das Parity Flag zeigt an, ob die Anzahl an Einsen des untersten Bytes einer vorangegangenen arithmetischen, logischen oder einer Vergleichsoperationen grade oder ungerade ist. Ist die Anzahl gerade, ist es gesetzt.
Dieses Flag stammt noch aus einer Zeit, in der häufig serielle Verbindungen genutzt wurden, die Paritätsbits zur Fehlererkennung benutzten. Heute wird es in dieser Funktion praktisch nicht mehr benötigt.
====== Das Auxiliary Flag (Bit Nr. 4) ======
Das Auxiliary Flag wird auch als Half-Carry bezeichnet und zeigt, wie das Carry Flag, einen Werteüberlauf an. Allerdings wird es bei einem Über- oder Unterlauf der unteren vier Bits eines Bytes gesetzt. Das wird vor allem für die Verarbeitung von BCD-Zahlen gebraucht.
====== Das Zero Flag (Bit Nr. 6) ======
Das Zero Flag wird gesetzt, wenn das Ergebnis einer arithmetischen oder logischen Operation Null ist. Es wird häufig benötigt, z.B. für die Konstruktion von Schleifen.
====== Das Sign Flag (Bit Nr. 7) ======
Das Sign Flag enthält jeweils eine Kopie des höchstwertigen Bits vom Ergebnis einer arithmetischen oder logischen Operation. Bei vorzeichenbehafteten Zahlen entspricht dies dem Vorzeichen. Es ist genau dann gesetzt, wenn das Ergebnis negativ ist. (Hierbei zählt 0 als positive Zahl)
====== Das Trap Flag (Bit Nr. 8) ======
Dieses Flag wird von Debuggern und ähnlichen Programmen gesetzt, um eine Ausführung des Programmes in Einzelschritten zu ermöglichen.
====== Das Interrupt Flag (Bit Nr. 9) ======
Dieses Flag zeigt an, ob der Prozessor Interrupts (hierzu später mehr) zulassen soll oder nicht.
====== Das Direction Flag (Bit Nr. 10) ======
Das Direction Flag indiziert eine Richtung (hin zu höheren oder hin zu niedrigeren Adressen), die eine Auswirkung auf die Funktion einiger Befehle hat. Die genaue Funktion wird bei den entsprechenden Befehlen beschrieben.
====== Das Overflow Flag (Bit Nr. 11) ======
Das Overflow Flag wird gesetzt, wenn das Ergebnis einer Operation zu einem Übertrag auf der höchsten Stelle geführt hat. Dies hat bei vorzeichenbehafteten Zahlen in etwa dieselbe Bedeutung wie das Setzen des Carry Flags bei Vorzeichenlosen.
=== 80186, 80188 ===
Der Vollständigkeit halber sollen hier noch kurz die Nachfolger dieser beiden Prozessoren erwähnt werden. Deren Befehlsumfang wurde erweitert und stellenweise optimiert, so dass ein 80186 etwa ein Viertel schneller arbeitet als ein gleich getakteter 8086.
Der 80186 ist eher ein integrierter Mikrocontroller als ein Mikroprozessor, denn er enthält auch einen ''Interrupt Controller,'' einen DMA-Chip und einen Timer. Diese waren allerdings inkompatibel zu den vorher verwendeten externen Logiken des PC/XT, was eine Verwendung dort sehr schwierig machte. Darum wurde er im PC selten verwendet, war jedoch auf Adapterkarten als selbstständiger Mikroprozessor relativ häufig zu finden, beispielsweise auf ISDN-Karten.
Der 80188 ist wiederum eine abgespeckte Version mit 8-Bit-Datenbus, der 16-Bit-Zugriffe selbsttätig aufteilt. Wie beim 80188 sind 8-Bit-Zugriffe genauso schnell wie beim 80186, 16-Bit-Zugriffe benötigen die doppelte Zeit.
=== 80286 ===
Man kann den 80286 als direkten Nachfolger des 8086 sehen, da der 80186/80188 durch die Inkompatibilitäten in PCs nicht weit verbreitet war. Das interessanteste neue Feature war der 16 Bit ''Protected Mode''. Damit ist es möglich, mehrere (quasi) gleichzeitig laufende Programme voneinander abzuschotten.
Dieser Modus ist in der x86-Architektur die Basis für moderne Betriebssysteme, die Multitasking und geschützte Speicherbereiche unterstützen. Zusätzlich steigt mit dem 80286 im Protected Mode der adressierbare Arbeitsspeicher von 1 MiB auf 16 MiB. Leider kann man den Protected Mode auf dem 286er nur durch einen Reset verlassen. Dadurch war er, zur Hochzeit von DOS, für die meisten Anwendungen eher unattraktiv und konnte sich auf dieser Platform nie richtig durchsetzen.
=== 80386 ===
Mit dem 80386 entwickelte Intel erstmals eine 32-Bit-CPU. Damit konnte der Prozessor 4 GiB Speicher linear ansprechen. Da sich der ''Protected Mode'' beim 80286 anfänglich nicht durchsetzen konnte, enthielt die 80386-CPU einen virtuellen 8086-Modus. Er kann aus dem ''Protected Mode'' heraus gestartet werden und simuliert einen oder mehrere 8086-Prozessoren. Die internen Speichereinheiten des Prozessors, die Register, wurden von 16 Bit auf 32 Bit verbreitert.
Wie schon beim 8086 brachte Intel mit dem 80386SX eine ''Low-Cost''-Variante in den Handel, die statt des 32 Bit breiten nur einen 16 Bit breiten Datenbus hatte.
=== 80486 ===
Mit dem 80486-Prozessor brachte Intel eine überarbeitete 80386-CPU auf den Markt, die um einen Cache und einen internen mathematischen Coprozessor erweitert wurde. Da der Cache sehr viel schneller als der normale Hauptspeicher ist, beschleunigt er die Ausführung von Programmen erheblich. Dies wird dadurch erreicht, dass Daten im Voraus aus dem Hauptspeicher geladen werden können und dann sofort zur Verfügung stehen, wenn die CPU sie benötigt. Hin und wieder muss der Prozessor zwar immer noch auf den langsamen Hauptspeicher warten, nämlich wenn die Daten nicht im Cache vorhanden sind, aber eben viel seltener.
Den mathematischen Coprozessor kennen wir heute eher als FPU, die Fließkommaeinheit. Bis zum 80486 war das grundsätzlich ein zweiter Chip, der auf einem eigenen Sockel auf der Hauptplatine nachgerüstet werden konnte. Mit dem 80486SX gab es wieder eine „Sparvariante“ des normalen 80486, die ohne den integrierten mathematischen Coprozessor auskommen musste. Es gab dafür aber auch wieder einen Externen, den 80487. Der war aber so teuer, dass ein vollwertiger 80486 billiger als der Nachrüstchip war. Der Datenbus wurde beim 80486SX nicht beschränkt. Mit seinem Cache verhielt er sich wie ein leistungsfähigerer 80386.
=== 80586/Pentium-Architektur ===
Mit dem Pentium-Prozessor (und den kompatiblen Varianten der Konkurrenz) wurde unter anderem ein Konzept der parallelen Instruktionsausführung in die Prozessoren aufgenommen, die superskalare Ausführung. Der Prozessor analysiert die Befehle, die demnächst auszuführen sind. Falls keine direkte Abhängigkeit der Instruktionen untereinander besteht und die nötige Ressource (z. B. der Coprozessor) frei ist, wird die Ausführung vorgezogen und die Instruktion parallel ausgeführt. Dies verbessert die Ausführungsgeschwindigkeit deutlich, macht jedoch auch das Assembler Programmieren komplexer, denn die Ausführungszeit von Instruktionen hängt nun vom Kontext der vorher und nachher auszuführenden Instruktionen ab.
Mit der späteren MMX-Erweiterung der Pentium-Prozessor-Architektur fand eine weitere Form der parallelen Ausführung ihren Platz in der x86-Architektur, die parallele Datenverarbeitung auf Vektoren (SIMD). Hierzu wurde der Befehlssatz um Vektoroperationen erweitert, welche mit den Registern des Coprozessors verwendet werden können.
=== x86-64-Architektur ===
Mit der x86-64-Architekturerweiterung, eingeführt von AMD und später von Intel übernommen, wurden die bisherigen Konzepte und Instruktionen der 32-Bit-x86-Prozessorarchitektur beibehalten. Die Register und Busse wurden von 32 Bit auf 64 Bit erweitert und ein neuer 64Bit Ausführungsmodus eingeführt, die 32-Bit-Betriebsmodi sind weiterhin möglich. Allerdings fiel hier der ''virtual protected Mode'' weg, der sowieso nicht mehr verwendet wurde.
== Die Register der 8086/8088-CPU ==
Die Register im Einzelnen:
'''Adressregister'''
CS-, DS-, ES- und SS-Register
:Eine spezielle Bedeutung unter den Registern haben die Segmentregister CS (Codsegmentregister), DS (Datensegmentregister), ES (Extrasegmentregister) und SS (Stacksegmentregister). Sie bilden im so genannten ''Real Mode'' gemeinsam mit dem Offset die physikalische Adresse. Man kann sie nur dafür nutzen; sie können weder als allgemeine Register benutzt, noch direkt verändert werden.
== Interrupts ==
Während die CPU ein Programm bearbeitet, können verschiedene Ereignisse wie diese eintreten: Der Anwender drückt eine Taste, dem Drucker geht das Papier aus oder die Festplatte ist mit dem Schreiben der Daten fertig.
Um darauf reagieren zu können, hat der Prozessor zwei Möglichkeiten:
* Die CPU kann ständig nachfragen, ob so ein Ereignis eingetreten ist. Dieses Verfahren bezeichnet man als Polling oder auch "aktives Warten". Der Nachteil dieser Methode ist, dass der Prozessor die ganze Zeit mit Warten beschäftigt ist und nichts anderes machen kann.
* Das Gerät erzeugt ein Signal, sobald ein Ereignis eintritt, und schickt dieses über einen Interrupt-Controller an den Prozessor. Die CPU unterbricht das gerade laufende Programm, verarbeitet das Ereignis und setzt anschließend die Verarbeitung des unterbrochenen Programms fort. Das unterbrochene Programm bekommt von dem aufgetretenen Interrupt nichts mit.
Ein solches Interrupt-Signal ist ein Hardware-Interrupt, im Unterschied zu Software-Interrupts, die durch den <code>INT</code>-Befehl ausgelöst werden. Hardware-Interrupts sind asynchron, d.h. es ist nicht vorhersagbar, wann sie ausgelöst werden. Ein Software-Interrupt hingegen wird vom laufenden Programm ausgelöst und ist damit synchron zum Programmablauf.
Manchmal ist es nötig, die Unterbrechung des Programms durch Interrupts zu verhindern, zum Beispiel bei der Manipulation der Interrupt-Vector-Tabelle. Dazu löscht man das Interruptflag (IF = 0) mit dem Befehl <code>cli</code> ''(Clear Interruptflag).'' <code>sti</code> ''(Set Interruptflag)'' setzt es (IF = 1). Sind die Interrupts auf diese Weise gesperrt, kann das System auf keine Ein- oder Ausgabe mehr reagieren. Der Anwender merkt das daran, dass das System seine Eingaben über die Tastatur oder die Maus nicht mehr bearbeitet.
Die 80x86-CPU hat zwei Interrupt-Eingänge, den INTR ''(Interrupt Request)'' und den NMI ''(Non Maskable Interrupt)''. Der Interrupt INTR ist für normale Anfragen an den Prozessor zuständig, während der NMI nur besonders wichtigen Interrupts vorbehalten ist. Das Besondere am ''Non Maskable Interrupt'' („nicht maskierbar“) ist, dass er nicht durch Löschen des Interruptflags unterdrückt werden kann.
== Adressierung des Arbeitsspeichers im ''Real Mode'' ==
Der Adressbus dient der CPU dazu, Speicherplätze im Arbeitsspeicher anzusprechen, indem sie die Adresse eines Speicherplatzes über die Leitungen des Busses sendet. Die 8086/88-CPU hat dafür 20 Adressleitungen, die den Adressbus bilden. Damit könnte der Prozessor unmittelbar 2<sup>20</sup> = 1 MByte adressieren, wenn auch das zuständige Register in der CPU 20 Bit breit wäre. In dem Register muss sich die Adresse befinden, bevor sie auf den Adressbus geht. Mit ihren 16-Bit-Registern kann die 8086/88-CPU jedoch höchstens 2<sup>16</sup> = 65.536 Byte direkt adressieren.
[[Datei:Segmentierung.PNG|miniatur|300px|Segmentierung in ''Real Mode'']]
Um mit dieser CPU ein Megabyte Speicher anzusprechen, benötigt man zwei Register. Mit zwei 16-Bit-Registern können wir 2<sup>32</sup> = 4 Gigabyte Arbeitsspeicher ansprechen - mehr als wir benötigen. Eine 20-Bit-Adresse könnte mit Hilfe der zwei Register gebildet werden, indem man auf das erste Register die ersten 16 Bit der Adresse legt und auf das zweite die restlichen 4 Bit.
Ein Vorteil dieser Methode ist, dass der gesamte Adressraum linear angesprochen werden kann. „Linear“ bedeutet, dass die logische Adresse – also die, die sich in den Registern befindet – mit der physikalischen Adresse der Speicherzelle im Arbeitsspeicher übereinstimmt. Das erspart uns die Umrechnung zwischen logischer und physikalischer Adresse.
Das Verfahren hat allerdings auch Nachteile: Die CPU muss beim Adressieren immer zwei Register laden. Zudem bleiben zwölf der sechzehn Bits im zweiten Register ungenutzt.
Deshalb ist im Real Mode ein anderes Adressierungsverfahren üblich: Mit einem 16-Bit-Register können wir 65.536 Byte an einem Stück ansprechen. Bleiben wir innerhalb dieser Grenze, brauchen wir für die Adressierung einer Speicherzelle kein zweites Register.
Um den ganzen Speicherbereich von 1 MByte zu nutzen, können wir mehrere 65.536-Byte-Blöcke über den gesamten Speicher von 1 MByte verteilen und jeden von ihnen mit dem zweiten Register adressieren. So ein Block heißt Segment. Das zweite Register legt fest, an welcher Speicheradresse ein Segment anfängt, und mit dem ersten Register bewegen wir uns innerhalb des Segments.
Der Speicher von 1 MByte, der mit den 20 Leitungen des Adressbusses adressiert werden kann, ist allerdings nicht in ein paar säuberlich getrennte Segmente unterteilt. Vielmehr überlappen sich eine Menge Segmente, weil jedes 16. Byte, verteilt über 1 MByte, als möglicher Beginn eines 64-KByte-Segments festgelegt wurde. Der Abstand von 16 Byte kommt zu Stande, weil die erlaubten Anfänge der Segmente gleichmäßig auf die 1 MByte verteilt wurden (Division 1.048.576 Byte durch 65.536).
Die Überlappung der Segmente ist eine Stolperfalle für Programmierer: Ein und dieselbe Speicherzelle im Arbeitsspeicher kann durch viele Kombinationen von Adressen des ersten und des zweiten Registers adressiert werden. Passt man nicht auf, dann überschreibt ein Programm unerlaubt Daten und Programmcode und stürzt ab.
Die Adresse im zweiten Register, die den Anfang eines Segments darstellt, heißt Segmentadresse. Die physikalische Adresse im Arbeitsspeicher errechnet sich aus der Segmentadresse und der Adresse des ersten Registers, der so genannten Offsetadresse. Erst wird die Segmentadresse mit 16, dem Abstand der Segmente, multipliziert. Zur Multiplikation mit 16 hängt man rechts einfach vier Nullen an. Hinzu wird die Offsetadresse addiert:
'''Physikalische Adresse = Segmentadresse * 16 + Offsetadresse'''
Die Offsetadresse im ersten Register erlaubt, auf ein 65.536 Byte großes zusammenhängendes Speicherfeld zuzugreifen. In Verbindung mit der Segmentadresse im zweiten Register kann man den gesamten Speicher erreichen. Beschränkt sich ein Programm auf die Speicherplätze innerhalb eines Segments, braucht die Segmentadresse gar nicht geändert werden.
Sehen wir uns dazu ein Beispiel an: Nehmen wir an, dass das Betriebssystem ein Programm lädt, das 40 KByte Daten und 50 KByte Code umfasst. Daten und Code wandern in den Arbeitsspeicher, wo sie säuberlich getrennt eigene Speicherbereiche einnehmen sollen. Um separate Speicherbereiche für die Daten und den Code zu schaffen, initialisiert das Betriebssystem zuvor das Datensegmentregister (DS) und das Codesegmentregister (CS) mit den Adressen, an denen beginnend die Daten und der Code im Arbeitsspeicher gelagert werden.
Wollen wir beispielsweise Text ausgeben, müssen wir eine Betriebssystemfunktion aufrufen, der wir die Adresse des Textes übergeben, den sie ausgeben soll. Die Segmentadresse des Textes steht schon im Datensegmentregister. Wir müssen der Betriebssystemfunktion nur noch die Offsetadresse nennen. Man sieht: Das Betriebssystem erfährt die vollständige Adressinformation, obwohl wir der Funktion nur den Offsetanteil übergeben haben.
Kommt ein kleines Programm mit weniger als 64 kByte inklusive aller Daten und des Codes aus, braucht man das Segmentregister beim Programmstart nur einmal zu initialisieren. Die Daten erreicht man alle allein mit dem Offset – eine ökonomische Sache.
Fassen wir die Eigenschaften von Segmenten und Offsets zusammen:
* Jedes Segment fasst maximal 64 kByte, weil die Register der CPU nur 16 Bit breit sind.
* Speicheradressen innerhalb eines Segments erreicht man mit Hilfe des Offsets.
* Es gibt 65.536 Segmente (2<sup>16</sup>).
* Die Segmentanfänge liegen immer mindestens 16 Byte weit auseinander.
* Segmente können sich gegenseitig überlappen.
* Die Adressierung mit Segmenten und Offset erfolgt nur im ''Real Mode'' so wie beschrieben.
Neuere Prozessoren und Betriebssysteme besitzen die genannte Adressregister-Beschränkung nicht mehr. Ab dem 80386 können bis zu 4 GB linear adressiert werden. Deshalb setzen wir uns nicht weiter im Detail mit Segmenten und Offset auseinander. Die Programme jedoch, die wir im Folgenden entwickeln, sind dennoch höchstens 64 kByte groß und kommen deshalb mit einem Segment aus.
<noinclude>
{{Navigation zurückhochvor buch|
zurücktext= Grundlagen|
zurücklink= ../_Grundlagen|
hochtext= Assembler-Programmierung für x86-Prozessoren|
hochlink= ../|
vortext= Das erste Assemblerprogramm |
vorlink= ../_Das erste Assemblerprogramm}}
</noinclude>
dusytugiue4evaqu6sg2hyhzfo69gq2
Assembler-Programmierung für x86-Prozessoren/ Das erste Assemblerprogramm
0
5062
1088548
1010086
2026-07-02T09:32:55Z
Gebu
27433
/* Das erste Programm */ + Leerzeichen für bessere Lesbarkeit
1088548
wikitext
text/x-wiki
<noinclude>
{{Vorlage:Navigation Reihe|../#Inhaltsverzeichnis|Assembler-Programmierung für x86-Prozessoren}}
</noinclude>
== Die Befehle MOV und XCHG ==
Der <code>mov</code>-Befehl ''(move)'' ist wohl einer der am häufigsten verwendeten Befehle im Assembler. Er hat die folgende Syntax:
<syntaxhighlight lang="asm">
mov op1, op2
</syntaxhighlight>
Mit dem <code>mov</code>-Befehl wird der zweite Operand in den ersten Operanden kopiert. Der erste Operand wird auch als Zieloperand, der zweite als Quelloperand bezeichnet. Beide Operanden müssen die gleiche Größe haben. Wenn der erste Operand beispielsweise die Größe von zwei Byte besitzt, muss auch der zweite Operand die Größe von zwei Byte besitzen.
Es ist nicht erlaubt, als Operanden das IP-Register zu benutzen. Wir werden später mit Sprungbefehlen noch eine indirekte Möglichkeit kennen lernen, dieses Register zu manipulieren.
Außerdem ist es nicht erlaubt, eine Speicherstelle in eine andere Speicherstelle zu kopieren. Diese Regel gilt für '''alle''' Assemblerbefehle mit zwei Operanden: Es dürfen niemals beide Operanden eine Speicherstelle ansprechen. Beim <code>mov</code>-Befehl hat dies zur Folge, dass, wenn eine Speicherstelle in eine zweite Speicherstelle kopiert werden soll, dies über ein Register erfolgen muss. Beispielsweise wird mit den zwei folgenden Befehlen der Inhalt von der Speicherstelle 0110h in die Speicherstelle 0112h kopiert:
<syntaxhighlight lang="asm">
mov ax, [0110]
mov [0112], ax
</syntaxhighlight>
Der <code>xchg</code>-Befehl ''(exchange)'' hat die gleiche Syntax wie der <code>mov</code>-Befehl:
<syntaxhighlight lang="asm">
xchg op1, op2
</syntaxhighlight>
Wie sein Name bereits andeutet, vertauscht er den ersten und den zweiten Operanden. Die Operanden können allgemeine Register oder ein Register und eine Speicherstelle sein.
== Das erste Programm ==
'''Schritt 1: Installieren des Assemblers'''
Laden Sie zunächst den Netwide-Assembler unter der folgenden Adresse herunter:
http://sourceforge.net/project/showfiles.php?group_id=6208
Dort sehen Sie eine Liste mit DOS 16-Bit-Binaries. Da wir unsere ersten Schritte unter DOS machen werden, laden Sie anschließend die Zip-Datei der aktuellsten Version herunter und entpacken diese.
macOS Anwender können eine aktuelle Version mittels Homebrew herunterladen.
'''Schritt 2: Assemblieren des ersten Programms'''
Anschließend kopieren Sie das folgende Programm in den Editor:
<syntaxhighlight lang="asm">
org 100h
start:
mov ax, 5522h
mov cx, 1234h
xchg cx, ax
mov al, 0
mov ah, 4Ch
int 21h
</syntaxhighlight>
Speichern Sie es unter der Bezeichnung „firstp.asm“. Anschließend starten Sie die Eingabeaufforderung "cmd.exe" und wechseln in das Verzeichnis, in das Sie den Assembler entpackt haben. Dort übersetzen Sie das Programm (wir nehmen an, dass der Quellcode im selben Verzeichnis steht wie der Assembler; ansonsten muss der Pfad natürlich mit angegeben werden):
nasm firstp.asm -f bin -o firstp.com
Mit der Option <code>-f</code> kann festgelegt werden, dass die übersetze Datei eine <code>*.COM</code> ist (dies ist die Voreinstellung des NASM). Bei diesem Dateityp besteht ein Programm aus nur einem Segment in dem sowohl Code, Daten wie auch der Stack liegt. Allerdings können COM-Programme auch nur maximal 64 KB groß werden. Eine komplette Liste aller möglichen Formate für <code>-f</code> können Sie sich mit der Option <code>-hf</code> ausgeben lassen. Über den Parameter <code>-o</code> legen Sie fest, dass Sie den Namen der assemblierten Datei selbst festlegen wollen.
Sie können das Programm nun ausführen, indem Sie <code>firstp</code> eingeben. Da nur einige Register hin und her geschoben werden, bekommen Sie allerdings nicht viel zu sehen.
'''Schritt 3: Analyse'''
Das Programm besteht sowohl aus Assembleranweisungen als auch Assemblerbefehlen. Nur die Assemblerbefehle werden übersetzt. Assembleranweisungen hingegen enthalten wichtige Informationen für den Assembler, die er beim Übersetzen des Programms benötigt.
Die Assembleranweisung ORG ''(origin)'' sagt dem Assembler, an welcher Stelle das Programm beginnt. Wir benötigen diese Assembleranweisung, weil Programme mit der Endung <tt>.COM</tt> immer mit Adresse 100h beginnen. Dies ist wichtig, wenn der Assembler eine Adresse beispielsweise für Sprungbefehle berechnen muss. In unserem sehr einfachen Beispiel muss der Assembler keine Adresse berechnen, weshalb wir die Anweisung in diesem Fall auch hätten weglassen können. Mit <code>start</code> wird schließlich der Beginn des Programmcodes festgelegt.
Für die Analyse des Programms benutzen wir den Debugger, der bereits seit MS-DOS mitgeliefert wurde. Er ist zwar nur sehr einfach und textorientiert, hat jedoch den Vorteil, dass er nicht erst installiert werden muss und kostenlos ist.
Starten Sie den Debugger mit <code>debug firstp.com</code>. Wenn Sie den Dateinamen beim Starten des Debuggers nicht mit angegeben haben, können Sie dies jederzeit über <code>n firstp.com</code> (n steht für engl. ''name'') und dem Befehl <code>l</code> ''(load)'' nachholen.
Anschließend geben Sie den Befehl <code>r</code> ein, um sich den Inhalt aller Register anzeigen zu lassen:
-r
AX=0000 BX=0000 CX=000C DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0CDC ES=0CDC SS=0CDC CS=0CDC IP=0100 NV UP EI PL NZ NA PO NC
0CDC:0100 B82255 MOV AX,5522
In der ersten Zeile stehen die Datenregister sowie die Stackregister. Ihr Inhalt ist zufällig und kann sich von Aufruf zu Aufruf unterscheiden. Nur das BX-Register ist immer auf 0 gestellt und das CX-Register gibt die Größe des Programmcodes an. Sämtliche Angaben sind in hexadezimaler Schreibweise angegeben.
In der nächsten Zeile befinden sich die Segmentregister sowie der Befehlszähler. Die Register CS:IP zeigen auf den ersten Befehl in unserem Programm. Wie wir vorher gesehen haben können wir die tatsächliche Adresse über die Formel
Physikalische Adresse = Offsetadresse + Segmentadresse * 16<sub>dez</sub>
errechnen. Setzen wir die Adresse für das Offset und das Segment ein, so erhalten wir
Physikalische Adresse = 0x0CDC * 16<sub>dez</sub> + 0x0100 = 0xCDC0 + 0x0100 = 0xCEC0.
Dahinter befinden sich die Zustände der Flags. Vielleicht werden Sie sich wundern, dass ein Flag fehlt: Es ist das ''Trap Flag,'' das dafür sorgt, dass nach jeder Anweisung der Interrupt 1 ausgeführt wird, um es zu ermöglichen, dass das Programm Schritt für Schritt abgearbeitet wird. Es ist immer gesetzt, wenn ein Programm mit dem Debugger aufgeführt wird.
In der dritten und letzten Zeile sehen Sie zu Beginn nochmals die Adresse des Befehls, die immer mit dem Registerpaar CS:IP übereinstimmt. Dahinter befindet sich der Opcode des Befehls. Wir merken uns an dieser Stelle, dass der Opcode für den Befehl <code>MOV AX,5522</code> 3 Byte groß ist (zwei Hexadezimalziffern entsprechen immer einem Byte).
Mit der Anweisung <code>t</code> ''(trace)'' führen wir nun den ersten Befehl aus und erhalten die folgende Ausgabe:
-t
'''AX=5522''' BX=0000 CX=000C DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0CDC ES=0CDC SS=0CDC CS=0CDC '''IP=0103''' NV UP EI PL NZ NA PO NC
0CDC:0103 B93412 MOV CX,1234
Wir haben die Register hervorgehoben, die sich verändert haben. Der Befehl <code>MOV</code> ''(move)'' hat dafür gesorgt, dass <code>5522</code> in das AX-Register kopiert wurde.
Der Prozessor hat außerdem den Inhalt des Programmzählers erhöht – und zwar um die Anzahl der Bytes, die der letzte Befehl im Arbeitsspeicher benötigte (also unsere 3 Bytes). Damit zeigt das Registerpaar CS:IP nun auf den nächsten Befehl.
Hat der Assembler nun wiederum den Befehl MOV CX,1234 abgearbeitet, erhöht er das IP-Register wiederum um die Größe des Opcodes und zeigt nun wiederum auf die Adresse des nächsten Befehls:
-t
'''AX=5522''' BX=0000 '''CX=1234''' DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0CDC ES=0CDC SS=0CDC CS=0CDC '''IP=0106''' NV UP EI PL NZ NA PO NC
0CDC:0106 91 XCHG CX,AX
Der <code>XCHG</code>-Befehl vertauscht nun die Register AX und CX, so dass jetzt AX den Inhalt von CX hat und CX den Inhalt von AX.
Wir haben nun genug gesehen und beenden deshalb das Programm an dieser Stelle. Dazu rufen wir über den Interrupt 21h die Betriebssystemfunktion 4Ch auf. Der Wert in AL (hier 0 für erfolgreiche Ausführung) wird dabei an das Betriebssystem zurückgegeben (er kann z. B. in Batch-Dateien über <tt>%ERRORLEVEL%</tt> abgefragt werden). Den Debugger können Sie nun beenden, indem Sie <code> q </code> (quit) eingeben.
== „Hello World“-Programm ==
Es ist ja inzwischen fast üblich geworden, ein „Hello World“-Programm in einer Einführung in eine Sprache zu entwickeln. Dem wollen wir natürlich folgen:
<syntaxhighlight lang="asm">
org 100h
start:
mov dx,hello_world
mov ah,09h
int 21h
mov al, 0
mov ah,4Ch
int 21h
section .data
hello_world: db 'hello, world', 13, 10, '$'
</syntaxhighlight>
Nachdem Sie das Programm übersetzt und ausgeführt haben, starten Sie es mit dem Debugger:
-r
AX=0000 BX=0000 CX=001B DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0CDC ES=0CDC SS=0CDC CS=0CDC IP=0100 NV UP EI PL NZ NA PO NC
0CDC:0100 BA0C01 MOV DX,010C
- q
Wie Sie erkennen können, hat der Assembler <code>hello_world</code> durch die Offsetadresse 010C ersetzt. Diese Adresse zusammen mit dem CS-Register entspricht der Stelle im Speicher, in der sich der Text befindet. Wir müssen diese der Betriebssystemfunktion 9h des Interrupts 21 übergeben, die dafür sorgt, dass der Text auf dem Bildschirm ausgegeben wird. Wie kommt der Assembler auf diese Adresse?
Die Anweisung „<tt>section .data</tt>“ bewirkt, dass hinter dem letzten Befehl des Programms ein Bereich für Daten reserviert wird. Am Beginn dieses Datenbereichs wird der Text <tt>'hello, world', 13, 10, '$'</tt> bereitgestellt. Ab welcher Adresse der Datenbereich beginnt, lässt sich nicht genau vorhersagen. Wieso?
Wir können zunächst bestimmen, wo unser Programmcode beginnt und wie lang unser Programmcode ist.
COM-Programme beginnen immer erst bei der Adresse 100h (sonst kann sie das Betriebssystem nicht ausführen). Die Bytes von 0 bis FFh hat das Betriebssystem für Verwaltungszwecke reserviert. Dies muss natürlich dem Assembler mit der Anweisung <code>org 100h</code> mitgeteilt werden, der sonst davon ausgehen würde, dass das Programm bei Adresse 0 beginnt. Es sei hier nochmals darauf hingewiesen, dass Assembleranweisungen nicht mit übersetzt werden, sondern lediglich dazu dienen, dass der Assembler das Programm richtig übersetzen kann.
Der Opcode von <code>mov dx,010C</code> hat eine Größe von 3 Byte, der Opcode von <code>mov ah,09</code> und <code>mov ah,4Ch</code> jeweils 2 Byte und der Opcode der Interruptaufrufe nochmals jeweils 2 Byte. Der Programmcode hat somit eine Größe von 11 Byte dezimal oder B Byte hexadezimal. Woher ich das weiß? Entweder kompiliere ich das Programm und drucke das Listing aus, oder ich benutze das DEBUG-Programm und tippe mal eben schnell die paar Befehle ein. Wie auch immer:
Das letzte Byte des Programms hat die Adresse 10Ah. Das ist auf den ersten Blick verblüffend, aber die Zählung hat ja nicht mit 101h, sondern mit 100h begonnen. Das erste freie Byte hinter dem Programmcode hat also die Adresse 10Bh, ab dieser Adresse könnten Daten stehen. Tatsächlich beginnt der Datenbereich erst an 10Ch, weil die meisten Compiler den Speicher ab geradzahligen oder durch vier teilbaren Adressen zuweisen.
Warum ist das so? Prozessoren lesen (und schreiben) 32 Bit gleichzeitig aus dem Speicher. Wenn eine 32-Bit-Variable an einer durch vier teilbaren Speicheradresse beginnt, kann sie von der CPU mit einem Speicherzugriff gelesen werden. Beginnt die Variable an einer anderen Speicheradresse, sind zwei Speicherzyklen notwendig.
Nun hängt es vom verwendeten Assemblerprogramm und dessen Voreinstellungen ab, welcher Speicherplatz dem Datensegment zugewiesen wird. Ein „kluges“ Assemblerprogramm wird eine 16-Bit-Variable oder eine 32-Bit-Variable stets so anordnen, dass sie mit einem Speicherzugriff gelesen werden kann. Nötigenfalls bleiben einige Speicherplätze ungenutzt. Wenn der Assembler allerdings die Voreinstellung hat, kein einziges Byte zu vergeuden, obwohl dadurch das Programm langsamer wird, tut er auch das. Die meisten Assembler werden den Datenbereich ab 10Ch oder 110h beginnen lassen.
Eine weitere Anweisung in diesem Programm ist die DB-Anweisung. Durch sie wird byteweise Speicherplatz reserviert. Der NASM kennt darüber hinaus noch weitere Anweisungen, um Speicherplatz zu reservieren. Dies sind:
{| style="margin-top:1em; margin-left:1em; margin-bottom:1em; background:#DDEEFF;border:1px solid black; padding:1em"
! Anweisung
! Breite
! Bezeichnung
|-----
| DW
| 2 Byte
| Word
|-----
| DD
| 4 Byte
| Doubleword
|-----
| DF
| 6 Byte
| -
|-----
| DQ
| 8 Byte
| Quadword
|----
| DT
| 10 Byte
| Ten Byte
|}
Die Zahl 13 dezimal entspricht im ASCII Zeichensatz dem Wagenrücklauf, die Zahl 10 dezimal entspricht im ASCII-Zeichensatz dem Zeilenvorschub. Beide zusammen setzen den Cursor auf den Anfang der nächsten Zeile. Das <code>$</code>-Zeichen wird für den Aufruf der Funktion 9h des Interrupts 21h benötigt und signalisiert das Ende der Zeichenkette.
== EXE-Dateien ==
Die bisher verwendeten COM-Dateien können maximal ein Segment groß werden. EXE-Dateien können dagegen aus mehreren Segmenten bestehen und damit größer als 64 KB werden.
Im Gegensatz zu DOS unterstützt Windows überhaupt keine COM-Dateien mehr und erlaubt nur EXE-Dateien auszuführen. Trifft Windows auf eine COM-Datei, wird sie automatisch in der Eingabeaufforderung als MS-DOS-Programm ausgeführt.
Im Gegensatz zu einer COM-Datei besteht eine EXE-Datei nicht nur aus ausführbarem Code, sondern besitzt einen Header, der vom Betriebssystem ausgewertet wird. Der Header unterscheidet sich zwischen Windows und DOS. Wir wollen jedoch nicht näher auf die Unterschiede eingehen.
Ein weiterer Unterschied ist, dass EXE-Dateien in zwei Schritten erzeugt werden. Beim Übersetzen des Quellcodes entsteht zunächst eine „Objektdatei“ als Zwischenprodukt. Eine oder mehrere Objektdateien werden anschließend von einem Linker zum EXE-Programm zusammengefügt. Bei einem Teil der Objektdateien handelt es sich üblicherweise um Dateien aus Programmbibliotheken.
Der Netwide-Assembler besitzt allerdings selbst keinen Linker. Sie müssen deshalb entweder auf einen Linker eines anderen Compilers oder auf einen freien Linker wie beispielsweise ALINK zurückgreifen. ALINK kann von der Webseite http://alink.sourceforge.net/ heruntergeladen werden.
Das folgende Programm ist eine Variante unseres „Hello World“-Programms.
<syntaxhighlight lang="asm">
segment code
start:
mov ax, data
mov ds, ax
mov dx, hello
mov ah, 09h
int 21h
mov al, 0
mov ah, 4Ch
int 21h
segment data
hello: db 'Hello World!', 13, 10, '$'
</syntaxhighlight>
Speichern Sie das Programm unter <tt>hworld.asm</tt> ab und übersetzen Sie es:
nasm hworld.asm -f obj -o hworld.obj
alink hworld.obj
Beim Linken des Programms gibt der Linker möglicherweise eine Warnung aus. Bei ''ALINK'' lautet sie beispielsweise <code>Warning – no stack</code>. Beachten Sie diese Fehlermeldung nicht. Wir werden in einem der nächsten Abschnitte erfahren, was ein Stack ist.
Die erste Änderung, die auffällt, sind die Assembleranweisungen <code>segment code</code> und <code>segment data</code>. Die Anweisung ist ein Synonym für <code>section</code>. Wir haben uns hier für <code>segment</code> entschieden, damit deutlicher wird, dass es sich hier im Unterschied zu einer COM-Datei tatsächlich um verschiedene Segmente handelt.
Die Bezeichnungen für die Segmente sind übrigens beliebig. Sie können die Segmente auch <code>hase</code> und <code>igel</code> nennen. Der Assembler benötigt die Bezeichnung lediglich für die Adressberechnung und muss dazu wissen, wo ein neues Segment anfängt. Allerdings ist es üblich das Codesegment mit <code>code</code> und das Datensegment mit <code>data</code> zu bezeichnen.
Die Anweisung <code>start:</code> legt den Anfangspunkt des Programms fest. Diese Information benötigt der Linker, wenn er mehrere Objektdateien zusammenlinken muss. In diesem Fall muss er wissen, in welcher Datei sich der Eintrittspunkt befindet.
In einer Intel-CPU gibt es keinen direkten Befehl, eine Konstante in ein Segmentregister zu laden. Man muss deshalb entweder den Umweg über ein universelles Register gehen (im Beispiel: AX), oder man benutzt den [[Stack]] (den man vorher korrekt initialisieren muss): <tt>push data</tt>, dann <tt>pop data</tt>.
Nachdem Sie das Programm übersetzt haben, führen Sie es mit dem Debugger aus:
<pre>
debug hworld.exe
-r
AX=0000 BX=FFFF CX=FE6F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0D3A ES=0D3A SS=0D4A CS=0D4A IP=0000 NV UP EI PL NZ NA PO NC
0D4A:0000 B84B0D MOV AX,0D4C
-t
AX=0D4C BX=FFFF CX=FE6F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0D3A ES=0D3A SS=0D4A CS=0D4A IP=0003 NV UP EI PL NZ NA PO NC
0D4A:0003 8ED8 MOV DS,AX
-t
AX=0D4B BX=FFFF CX=FE6F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0D4C ES=0D3A SS=0D4A CS=0D4A IP=0005 NV UP EI PL NZ NA PO NC
0D4A:0005 BA0000 MOV DX,0000
</pre>
Die ersten zwei Zeilen unterscheiden sich vom COM-Programm. Der Grund hierfür ist, dass wir nun zunächst das Datensegmentregister (DS) initialisieren müssen. Bei einem COM-Programm sorgt das Betriebssystem dafür, dass alle Segmentregister einen Anfangswert haben, und zwar alle den gleichen Wert. Bei einem COM-Programm braucht man sich deshalb nicht um die Segmentregister kümmern, hat dafür aber auch nur 64k für Programm + Daten zur Verfügung. Bei einem EXE-Programm entfällt die Einschränkung auf 64 k, aber man muss sich selbst um die Segmentregister kümmern.
Wie Sie sehen, beträgt die Differenz zwischen DS- und CS-Register anschließend 2 (0D4C – 0D4A). Das bedeutet allerdings nicht, dass nur zwei Byte zwischen Daten- und Codesegment liegt - darin würde der Code auch keinen Platz finden. Wie wir im letzten Abschnitt gesehen haben, liegen die Segmente 16 Byte auseinander, weshalb DS und CS Segment tatsächlich 32 Byte auseinanderliegen.
Das DX-Register erhält diesmal den Wert 0, da die Daten durch die Trennung von Daten- und Codesegment nun ganz am Anfang des Segments liegen.
Der Rest des Programms entspricht dem einer COM-Datei. Beenden Sie deshalb anschließend den Debugger.
== Hello World in anderen Betriebssystemen ==
Die oben angegebenen Programme enthalten zwei verschiedene Systemabhängigkeiten: Zum einen logischerweise die Abhängigkeit vom Prozessor (es handelt sich um Code für den 80x86, der logischerweise nicht auf einem anderen Prozessor lauffähig ist), aber zusätzlich die Abhängigkeit vom verwendeten Betriebssystem (in diesem Fall DOS; beispielsweise wird obiger Code unter Linux nicht laufen). Um die Unterschiede zu zeigen, sollen hier exemplarisch Versionen von Hello World für andere Betriebssysteme gezeigt werden. Der verwendete Assembler ist in allen Fällen nasm.
Eine Anmerkung vorweg: Die meisten Betriebssysteme verwenden den seit dem 80386 verfügbaren 32-Bit-Modus. Dieser wird später im Detail behandelt, im Moment ist nur interessant, dass die Register 32 Bits haben und ein „e“ (für ''extended'' = erweitert) am Anfang des Registernamens bekommen (z. B. <tt>eax</tt> statt <tt>ax</tt>), und dass man Segmentregister in der Regel vergessen kann.
=== Linux ===
Unter Linux werden statt Segmenten sections verwendet (letztlich landet alles im selben 32-Bit-Segment). Die Code-Section heißt „<tt>.text</tt>“, die Datensection „<tt>.data</tt>“ und der Einsprungpunkt für den Code „<tt>_start</tt>“. Systemaufrufe benutzen int 80h statt des 21h von DOS, Werte werden in der Regel wie unter DOS über Register übergeben (wenngleich die Einzelheiten sich unterscheiden). Außerdem wird ein Zeilenende unter Linux nur mit einem Linefeed-Zeichen (ASCII 10) gekennzeichnet. Es sollte nicht schwer sein, die einzelnen Elemente des Hello-World-Programms im folgenden Quelltext wiederzuerkennen.
<syntaxhighlight lang="asm">
section .text
global _start
_start:
mov ecx, hello
mov edx, length
mov ebx, 1 ; Dateinummer der Standard-Ausgabe
mov eax, 4 ; Funktionsnummer: Ausgabe
int 80h
mov ebx, 0
mov eax, 1 ; Funktionsnummer: Programm beenden
int 80h
section .data
hello db 'Hello World!', 10
length equ $ - hello;
</syntaxhighlight>
Die folgenden Kommandozeilenbefehle bewirken das Kompilieren und Ausführen des Programms:
nasm -g -f elf32 hello.asm
ld hello.o -o hello
./hello
Für einen 64-Bit Prozessor sind folgende Kommandozeilenbefehle notwendig
nasm -g -f elf64 hello.asm
ld hello.o -o hello
./hello
Erläuterung: <tt>nasm</tt> ist wieder der Assembler. Er erzeugt hier die Datei <tt>hello.o</tt>, die man noch nicht ausführen kann. Die Option <tt>-g</tt> sorgt dafür, dass Debuginformationen in die zu erzeugende <tt>hello.o</tt>-Datei geschrieben werden. Der sogenannte Linker <tt>ld</tt> erzeugt aus <tt>hello.o</tt> die fertige, lauffähige Datei <tt>hello</tt>. Der letzte Befehl startet schließlich das Programm.
Hat man den [http://de.wikipedia.org/wiki/GNU_Debugger GNU Debugger] am Start, kann man per
gdb hello
ähnlich wie unter ''MS Windows'' debuggen. Der GDB öffnet eine Art Shell, in der diverse Befehle verfügbar sind. Der Befehl <tt>list</tt> gibt den von uns verfassten Assemblercode inklusive Zeilennummern zurück. Mit <tt>break 5</tt> setzen wir einen Breakpoint in der fünften Zeile unseres Codes. Ein anschließendes <tt>run</tt> führt das Programm bis zum Breakpoint aus, und wir können nun mit <tt>info registers</tt> die Register auslesen. Einen einzelnen Schritt können wir mit <tt>stepi</tt> ausführen.
'''(gdb) list'''
1 section .text
2 global _start
3 _start:
4 mov ecx, hello
5 mov edx, length
6 mov ebx, 1 ; Dateinummer der Standard-Ausgabe
7 mov eax, 4 ; Funktionsnummer: Ausgabe
8 int 80h
9 mov ebx, 0
10 mov eax, 1 ; Funktionsnummer: Programm beenden
'''(gdb) break 5'''
Breakpoint 1 at 0x8048085: file hello.asm, line 5.
'''(gdb) run'''
Starting program: /home/name/projects/assembler/hello_world/hello
Breakpoint 1, _start () at hello.asm:5
5 mov edx, length
'''(gdb) info registers'''
eax 0x0 0
ecx 0x80490a4 134516900
edx 0x0 0
ebx 0x0 0
esp 0xbf9e6140 0xbf9e6140
ebp 0x0 0x0
esi 0x0 0
edi 0x0 0
eip 0x8048085 0x8048085 <_start+5>
eflags 0x200292 [ AF SF IF ID ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x0 0
'''(gdb) stepi'''
_start () at hello.asm:6
6 mov ebx, 1 ; Dateinummer der Standard-Ausgabe
'''(gdb) quit'''
=== NetBSD ===
Die NetBSD-Version unterscheidet sich von der Linux-Version vor allem dadurch, dass alle Argumente über den Stack übergeben werden. Auch der Stack wird später behandelt; an dieser Stelle ist nur wesentlich, dass man mit <tt>push</tt>-Werte auf den Stack bekommt, und dass die Reihenfolge wesentlich ist. Außerdem benötigt man für NetBSD eine spezielle <tt>.note</tt>-Section, die das Programm als NetBSD-Programm kennzeichnet.
<syntaxhighlight lang="asm">
section .note.netbsd.ident
dd 0x07,0x04,0x01
db "NetBSD",0x00,0x00
dd 200000000
section .text
global _start
_start:
push dword length
push dword hello
push dword 1
mov eax, 4
push eax
int 80h
push dword 0
mov eax, 1
push eax
int 80h
section .data
hello db 'Hello World!', 10
length equ $ - hello;
</syntaxhighlight>
=== macOS (Intel 64bit) ===
macOS erfordert je nach Betriebssystemversion einen unterschiedlichen Einstiegspunkt in das Programm.
<syntaxhighlight lang="asm">
; Dateiname: HelloWorld.macOS.asm
global _main ; exportable macOS entry 10.8 and upper
global start ; exportable macOS entry 10.7 and lower
section .text
start: ; entry point macOS entry 10.7 and lower
_main: ; entry point macOS entry 10.8 and upper
mov rax, 0x02000004
mov rdi, 1
mov rsi, message
mov rdx, 13
syscall
mov rax, 0x02000001
xor rdi, rdi
syscall
section .data
message:
db "Hello, World", 10
</syntaxhighlight>
Um das Programm lauffähig zu machen rufen wir nacheinander den Assembler und Linker auf, wobei wir kein ELF Dateiformat sondern ein Macho-64bit Dateiformat für macOS benötigen.
<syntaxhighlight lang="bash">
nasm -f macho64 -o HW.obj HelloWorld.macOS.asm
ld -macosx_version_min 11.2.1 -static -o world.run HW.obj
</syntaxhighlight>
<noinclude>
{{Navigation zurückhochvor buch|
zurücktext= Der Prozessor |
zurücklink= ../_Der Prozessor |
hochtext=Assembler-Programmierung für x86-Prozessoren|
hochlink= ../#Inhaltsverzeichnis|
vortext= Rechnen mit dem Assembler |
vorlink= ../_Rechnen mit dem Assembler}}
</noinclude>
34jie36wz7dfhu80ofwhlfzd9hi641v
1088549
1088548
2026-07-02T09:35:55Z
Gebu
27433
/* „Hello World“-Programm */ modernisiert, + Leerzeichen zur besseren Lesbarkeit
1088549
wikitext
text/x-wiki
<noinclude>
{{Vorlage:Navigation Reihe|../#Inhaltsverzeichnis|Assembler-Programmierung für x86-Prozessoren}}
</noinclude>
== Die Befehle MOV und XCHG ==
Der <code>mov</code>-Befehl ''(move)'' ist wohl einer der am häufigsten verwendeten Befehle im Assembler. Er hat die folgende Syntax:
<syntaxhighlight lang="asm">
mov op1, op2
</syntaxhighlight>
Mit dem <code>mov</code>-Befehl wird der zweite Operand in den ersten Operanden kopiert. Der erste Operand wird auch als Zieloperand, der zweite als Quelloperand bezeichnet. Beide Operanden müssen die gleiche Größe haben. Wenn der erste Operand beispielsweise die Größe von zwei Byte besitzt, muss auch der zweite Operand die Größe von zwei Byte besitzen.
Es ist nicht erlaubt, als Operanden das IP-Register zu benutzen. Wir werden später mit Sprungbefehlen noch eine indirekte Möglichkeit kennen lernen, dieses Register zu manipulieren.
Außerdem ist es nicht erlaubt, eine Speicherstelle in eine andere Speicherstelle zu kopieren. Diese Regel gilt für '''alle''' Assemblerbefehle mit zwei Operanden: Es dürfen niemals beide Operanden eine Speicherstelle ansprechen. Beim <code>mov</code>-Befehl hat dies zur Folge, dass, wenn eine Speicherstelle in eine zweite Speicherstelle kopiert werden soll, dies über ein Register erfolgen muss. Beispielsweise wird mit den zwei folgenden Befehlen der Inhalt von der Speicherstelle 0110h in die Speicherstelle 0112h kopiert:
<syntaxhighlight lang="asm">
mov ax, [0110]
mov [0112], ax
</syntaxhighlight>
Der <code>xchg</code>-Befehl ''(exchange)'' hat die gleiche Syntax wie der <code>mov</code>-Befehl:
<syntaxhighlight lang="asm">
xchg op1, op2
</syntaxhighlight>
Wie sein Name bereits andeutet, vertauscht er den ersten und den zweiten Operanden. Die Operanden können allgemeine Register oder ein Register und eine Speicherstelle sein.
== Das erste Programm ==
'''Schritt 1: Installieren des Assemblers'''
Laden Sie zunächst den Netwide-Assembler unter der folgenden Adresse herunter:
http://sourceforge.net/project/showfiles.php?group_id=6208
Dort sehen Sie eine Liste mit DOS 16-Bit-Binaries. Da wir unsere ersten Schritte unter DOS machen werden, laden Sie anschließend die Zip-Datei der aktuellsten Version herunter und entpacken diese.
macOS Anwender können eine aktuelle Version mittels Homebrew herunterladen.
'''Schritt 2: Assemblieren des ersten Programms'''
Anschließend kopieren Sie das folgende Programm in den Editor:
<syntaxhighlight lang="asm">
org 100h
start:
mov ax, 5522h
mov cx, 1234h
xchg cx, ax
mov al, 0
mov ah, 4Ch
int 21h
</syntaxhighlight>
Speichern Sie es unter der Bezeichnung „firstp.asm“. Anschließend starten Sie die Eingabeaufforderung "cmd.exe" und wechseln in das Verzeichnis, in das Sie den Assembler entpackt haben. Dort übersetzen Sie das Programm (wir nehmen an, dass der Quellcode im selben Verzeichnis steht wie der Assembler; ansonsten muss der Pfad natürlich mit angegeben werden):
nasm firstp.asm -f bin -o firstp.com
Mit der Option <code>-f</code> kann festgelegt werden, dass die übersetze Datei eine <code>*.COM</code> ist (dies ist die Voreinstellung des NASM). Bei diesem Dateityp besteht ein Programm aus nur einem Segment in dem sowohl Code, Daten wie auch der Stack liegt. Allerdings können COM-Programme auch nur maximal 64 KB groß werden. Eine komplette Liste aller möglichen Formate für <code>-f</code> können Sie sich mit der Option <code>-hf</code> ausgeben lassen. Über den Parameter <code>-o</code> legen Sie fest, dass Sie den Namen der assemblierten Datei selbst festlegen wollen.
Sie können das Programm nun ausführen, indem Sie <code>firstp</code> eingeben. Da nur einige Register hin und her geschoben werden, bekommen Sie allerdings nicht viel zu sehen.
'''Schritt 3: Analyse'''
Das Programm besteht sowohl aus Assembleranweisungen als auch Assemblerbefehlen. Nur die Assemblerbefehle werden übersetzt. Assembleranweisungen hingegen enthalten wichtige Informationen für den Assembler, die er beim Übersetzen des Programms benötigt.
Die Assembleranweisung ORG ''(origin)'' sagt dem Assembler, an welcher Stelle das Programm beginnt. Wir benötigen diese Assembleranweisung, weil Programme mit der Endung <tt>.COM</tt> immer mit Adresse 100h beginnen. Dies ist wichtig, wenn der Assembler eine Adresse beispielsweise für Sprungbefehle berechnen muss. In unserem sehr einfachen Beispiel muss der Assembler keine Adresse berechnen, weshalb wir die Anweisung in diesem Fall auch hätten weglassen können. Mit <code>start</code> wird schließlich der Beginn des Programmcodes festgelegt.
Für die Analyse des Programms benutzen wir den Debugger, der bereits seit MS-DOS mitgeliefert wurde. Er ist zwar nur sehr einfach und textorientiert, hat jedoch den Vorteil, dass er nicht erst installiert werden muss und kostenlos ist.
Starten Sie den Debugger mit <code>debug firstp.com</code>. Wenn Sie den Dateinamen beim Starten des Debuggers nicht mit angegeben haben, können Sie dies jederzeit über <code>n firstp.com</code> (n steht für engl. ''name'') und dem Befehl <code>l</code> ''(load)'' nachholen.
Anschließend geben Sie den Befehl <code>r</code> ein, um sich den Inhalt aller Register anzeigen zu lassen:
-r
AX=0000 BX=0000 CX=000C DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0CDC ES=0CDC SS=0CDC CS=0CDC IP=0100 NV UP EI PL NZ NA PO NC
0CDC:0100 B82255 MOV AX,5522
In der ersten Zeile stehen die Datenregister sowie die Stackregister. Ihr Inhalt ist zufällig und kann sich von Aufruf zu Aufruf unterscheiden. Nur das BX-Register ist immer auf 0 gestellt und das CX-Register gibt die Größe des Programmcodes an. Sämtliche Angaben sind in hexadezimaler Schreibweise angegeben.
In der nächsten Zeile befinden sich die Segmentregister sowie der Befehlszähler. Die Register CS:IP zeigen auf den ersten Befehl in unserem Programm. Wie wir vorher gesehen haben können wir die tatsächliche Adresse über die Formel
Physikalische Adresse = Offsetadresse + Segmentadresse * 16<sub>dez</sub>
errechnen. Setzen wir die Adresse für das Offset und das Segment ein, so erhalten wir
Physikalische Adresse = 0x0CDC * 16<sub>dez</sub> + 0x0100 = 0xCDC0 + 0x0100 = 0xCEC0.
Dahinter befinden sich die Zustände der Flags. Vielleicht werden Sie sich wundern, dass ein Flag fehlt: Es ist das ''Trap Flag,'' das dafür sorgt, dass nach jeder Anweisung der Interrupt 1 ausgeführt wird, um es zu ermöglichen, dass das Programm Schritt für Schritt abgearbeitet wird. Es ist immer gesetzt, wenn ein Programm mit dem Debugger aufgeführt wird.
In der dritten und letzten Zeile sehen Sie zu Beginn nochmals die Adresse des Befehls, die immer mit dem Registerpaar CS:IP übereinstimmt. Dahinter befindet sich der Opcode des Befehls. Wir merken uns an dieser Stelle, dass der Opcode für den Befehl <code>MOV AX,5522</code> 3 Byte groß ist (zwei Hexadezimalziffern entsprechen immer einem Byte).
Mit der Anweisung <code>t</code> ''(trace)'' führen wir nun den ersten Befehl aus und erhalten die folgende Ausgabe:
-t
'''AX=5522''' BX=0000 CX=000C DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0CDC ES=0CDC SS=0CDC CS=0CDC '''IP=0103''' NV UP EI PL NZ NA PO NC
0CDC:0103 B93412 MOV CX,1234
Wir haben die Register hervorgehoben, die sich verändert haben. Der Befehl <code>MOV</code> ''(move)'' hat dafür gesorgt, dass <code>5522</code> in das AX-Register kopiert wurde.
Der Prozessor hat außerdem den Inhalt des Programmzählers erhöht – und zwar um die Anzahl der Bytes, die der letzte Befehl im Arbeitsspeicher benötigte (also unsere 3 Bytes). Damit zeigt das Registerpaar CS:IP nun auf den nächsten Befehl.
Hat der Assembler nun wiederum den Befehl MOV CX,1234 abgearbeitet, erhöht er das IP-Register wiederum um die Größe des Opcodes und zeigt nun wiederum auf die Adresse des nächsten Befehls:
-t
'''AX=5522''' BX=0000 '''CX=1234''' DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0CDC ES=0CDC SS=0CDC CS=0CDC '''IP=0106''' NV UP EI PL NZ NA PO NC
0CDC:0106 91 XCHG CX,AX
Der <code>XCHG</code>-Befehl vertauscht nun die Register AX und CX, so dass jetzt AX den Inhalt von CX hat und CX den Inhalt von AX.
Wir haben nun genug gesehen und beenden deshalb das Programm an dieser Stelle. Dazu rufen wir über den Interrupt 21h die Betriebssystemfunktion 4Ch auf. Der Wert in AL (hier 0 für erfolgreiche Ausführung) wird dabei an das Betriebssystem zurückgegeben (er kann z. B. in Batch-Dateien über <tt>%ERRORLEVEL%</tt> abgefragt werden). Den Debugger können Sie nun beenden, indem Sie <code> q </code> (quit) eingeben.
== „Hello World“-Programm ==
Es ist üblich geworden, ein „Hello World“-Programm in einer Einführung in eine Sprache zu entwickeln. Dem wollen wir natürlich folgen:
<syntaxhighlight lang="asm">
org 100h
start:
mov dx, hello_world
mov ah, 09h
int 21h
mov al, 0
mov ah, 4Ch
int 21h
section .data
hello_world: db 'hello, world', 13, 10, '$'
</syntaxhighlight>
Nachdem Sie das Programm übersetzt und ausgeführt haben, starten Sie es mit dem Debugger:
-r
AX=0000 BX=0000 CX=001B DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0CDC ES=0CDC SS=0CDC CS=0CDC IP=0100 NV UP EI PL NZ NA PO NC
0CDC:0100 BA0C01 MOV DX,010C
- q
Wie Sie erkennen können, hat der Assembler <code>hello_world</code> durch die Offsetadresse 010C ersetzt. Diese Adresse zusammen mit dem CS-Register entspricht der Stelle im Speicher, in der sich der Text befindet. Wir müssen diese der Betriebssystemfunktion 9h des Interrupts 21 übergeben, die dafür sorgt, dass der Text auf dem Bildschirm ausgegeben wird. Wie kommt der Assembler auf diese Adresse?
Die Anweisung „<tt>section .data</tt>“ bewirkt, dass hinter dem letzten Befehl des Programms ein Bereich für Daten reserviert wird. Am Beginn dieses Datenbereichs wird der Text <tt>'hello, world', 13, 10, '$'</tt> bereitgestellt. Ab welcher Adresse der Datenbereich beginnt, lässt sich nicht genau vorhersagen. Wieso?
Wir können zunächst bestimmen, wo unser Programmcode beginnt und wie lang unser Programmcode ist.
COM-Programme beginnen immer erst bei der Adresse 100h (sonst kann sie das Betriebssystem nicht ausführen). Die Bytes von 0 bis FFh hat das Betriebssystem für Verwaltungszwecke reserviert. Dies muss natürlich dem Assembler mit der Anweisung <code>org 100h</code> mitgeteilt werden, der sonst davon ausgehen würde, dass das Programm bei Adresse 0 beginnt. Es sei hier nochmals darauf hingewiesen, dass Assembleranweisungen nicht mit übersetzt werden, sondern lediglich dazu dienen, dass der Assembler das Programm richtig übersetzen kann.
Der Opcode von <code>mov dx,010C</code> hat eine Größe von 3 Byte, der Opcode von <code>mov ah,09</code> und <code>mov ah,4Ch</code> jeweils 2 Byte und der Opcode der Interruptaufrufe nochmals jeweils 2 Byte. Der Programmcode hat somit eine Größe von 11 Byte dezimal oder B Byte hexadezimal. Woher ich das weiß? Entweder kompiliere ich das Programm und drucke das Listing aus, oder ich benutze das DEBUG-Programm und tippe mal eben schnell die paar Befehle ein. Wie auch immer:
Das letzte Byte des Programms hat die Adresse 10Ah. Das ist auf den ersten Blick verblüffend, aber die Zählung hat ja nicht mit 101h, sondern mit 100h begonnen. Das erste freie Byte hinter dem Programmcode hat also die Adresse 10Bh, ab dieser Adresse könnten Daten stehen. Tatsächlich beginnt der Datenbereich erst an 10Ch, weil die meisten Compiler den Speicher ab geradzahligen oder durch vier teilbaren Adressen zuweisen.
Warum ist das so? Prozessoren lesen (und schreiben) 32 Bit gleichzeitig aus dem Speicher. Wenn eine 32-Bit-Variable an einer durch vier teilbaren Speicheradresse beginnt, kann sie von der CPU mit einem Speicherzugriff gelesen werden. Beginnt die Variable an einer anderen Speicheradresse, sind zwei Speicherzyklen notwendig.
Nun hängt es vom verwendeten Assemblerprogramm und dessen Voreinstellungen ab, welcher Speicherplatz dem Datensegment zugewiesen wird. Ein „kluges“ Assemblerprogramm wird eine 16-Bit-Variable oder eine 32-Bit-Variable stets so anordnen, dass sie mit einem Speicherzugriff gelesen werden kann. Nötigenfalls bleiben einige Speicherplätze ungenutzt. Wenn der Assembler allerdings die Voreinstellung hat, kein einziges Byte zu vergeuden, obwohl dadurch das Programm langsamer wird, tut er auch das. Die meisten Assembler werden den Datenbereich ab 10Ch oder 110h beginnen lassen.
Eine weitere Anweisung in diesem Programm ist die DB-Anweisung. Durch sie wird byteweise Speicherplatz reserviert. Der NASM kennt darüber hinaus noch weitere Anweisungen, um Speicherplatz zu reservieren. Dies sind:
{| style="margin-top:1em; margin-left:1em; margin-bottom:1em; background:#DDEEFF;border:1px solid black; padding:1em"
! Anweisung
! Breite
! Bezeichnung
|-----
| DW
| 2 Byte
| Word
|-----
| DD
| 4 Byte
| Doubleword
|-----
| DF
| 6 Byte
| -
|-----
| DQ
| 8 Byte
| Quadword
|----
| DT
| 10 Byte
| Ten Byte
|}
Die Zahl 13 dezimal entspricht im ASCII Zeichensatz dem Wagenrücklauf, die Zahl 10 dezimal entspricht im ASCII-Zeichensatz dem Zeilenvorschub. Beide zusammen setzen den Cursor auf den Anfang der nächsten Zeile. Das <code>$</code>-Zeichen wird für den Aufruf der Funktion 9h des Interrupts 21h benötigt und signalisiert das Ende der Zeichenkette.
== EXE-Dateien ==
Die bisher verwendeten COM-Dateien können maximal ein Segment groß werden. EXE-Dateien können dagegen aus mehreren Segmenten bestehen und damit größer als 64 KB werden.
Im Gegensatz zu DOS unterstützt Windows überhaupt keine COM-Dateien mehr und erlaubt nur EXE-Dateien auszuführen. Trifft Windows auf eine COM-Datei, wird sie automatisch in der Eingabeaufforderung als MS-DOS-Programm ausgeführt.
Im Gegensatz zu einer COM-Datei besteht eine EXE-Datei nicht nur aus ausführbarem Code, sondern besitzt einen Header, der vom Betriebssystem ausgewertet wird. Der Header unterscheidet sich zwischen Windows und DOS. Wir wollen jedoch nicht näher auf die Unterschiede eingehen.
Ein weiterer Unterschied ist, dass EXE-Dateien in zwei Schritten erzeugt werden. Beim Übersetzen des Quellcodes entsteht zunächst eine „Objektdatei“ als Zwischenprodukt. Eine oder mehrere Objektdateien werden anschließend von einem Linker zum EXE-Programm zusammengefügt. Bei einem Teil der Objektdateien handelt es sich üblicherweise um Dateien aus Programmbibliotheken.
Der Netwide-Assembler besitzt allerdings selbst keinen Linker. Sie müssen deshalb entweder auf einen Linker eines anderen Compilers oder auf einen freien Linker wie beispielsweise ALINK zurückgreifen. ALINK kann von der Webseite http://alink.sourceforge.net/ heruntergeladen werden.
Das folgende Programm ist eine Variante unseres „Hello World“-Programms.
<syntaxhighlight lang="asm">
segment code
start:
mov ax, data
mov ds, ax
mov dx, hello
mov ah, 09h
int 21h
mov al, 0
mov ah, 4Ch
int 21h
segment data
hello: db 'Hello World!', 13, 10, '$'
</syntaxhighlight>
Speichern Sie das Programm unter <tt>hworld.asm</tt> ab und übersetzen Sie es:
nasm hworld.asm -f obj -o hworld.obj
alink hworld.obj
Beim Linken des Programms gibt der Linker möglicherweise eine Warnung aus. Bei ''ALINK'' lautet sie beispielsweise <code>Warning – no stack</code>. Beachten Sie diese Fehlermeldung nicht. Wir werden in einem der nächsten Abschnitte erfahren, was ein Stack ist.
Die erste Änderung, die auffällt, sind die Assembleranweisungen <code>segment code</code> und <code>segment data</code>. Die Anweisung ist ein Synonym für <code>section</code>. Wir haben uns hier für <code>segment</code> entschieden, damit deutlicher wird, dass es sich hier im Unterschied zu einer COM-Datei tatsächlich um verschiedene Segmente handelt.
Die Bezeichnungen für die Segmente sind übrigens beliebig. Sie können die Segmente auch <code>hase</code> und <code>igel</code> nennen. Der Assembler benötigt die Bezeichnung lediglich für die Adressberechnung und muss dazu wissen, wo ein neues Segment anfängt. Allerdings ist es üblich das Codesegment mit <code>code</code> und das Datensegment mit <code>data</code> zu bezeichnen.
Die Anweisung <code>start:</code> legt den Anfangspunkt des Programms fest. Diese Information benötigt der Linker, wenn er mehrere Objektdateien zusammenlinken muss. In diesem Fall muss er wissen, in welcher Datei sich der Eintrittspunkt befindet.
In einer Intel-CPU gibt es keinen direkten Befehl, eine Konstante in ein Segmentregister zu laden. Man muss deshalb entweder den Umweg über ein universelles Register gehen (im Beispiel: AX), oder man benutzt den [[Stack]] (den man vorher korrekt initialisieren muss): <tt>push data</tt>, dann <tt>pop data</tt>.
Nachdem Sie das Programm übersetzt haben, führen Sie es mit dem Debugger aus:
<pre>
debug hworld.exe
-r
AX=0000 BX=FFFF CX=FE6F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0D3A ES=0D3A SS=0D4A CS=0D4A IP=0000 NV UP EI PL NZ NA PO NC
0D4A:0000 B84B0D MOV AX,0D4C
-t
AX=0D4C BX=FFFF CX=FE6F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0D3A ES=0D3A SS=0D4A CS=0D4A IP=0003 NV UP EI PL NZ NA PO NC
0D4A:0003 8ED8 MOV DS,AX
-t
AX=0D4B BX=FFFF CX=FE6F DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0D4C ES=0D3A SS=0D4A CS=0D4A IP=0005 NV UP EI PL NZ NA PO NC
0D4A:0005 BA0000 MOV DX,0000
</pre>
Die ersten zwei Zeilen unterscheiden sich vom COM-Programm. Der Grund hierfür ist, dass wir nun zunächst das Datensegmentregister (DS) initialisieren müssen. Bei einem COM-Programm sorgt das Betriebssystem dafür, dass alle Segmentregister einen Anfangswert haben, und zwar alle den gleichen Wert. Bei einem COM-Programm braucht man sich deshalb nicht um die Segmentregister kümmern, hat dafür aber auch nur 64k für Programm + Daten zur Verfügung. Bei einem EXE-Programm entfällt die Einschränkung auf 64 k, aber man muss sich selbst um die Segmentregister kümmern.
Wie Sie sehen, beträgt die Differenz zwischen DS- und CS-Register anschließend 2 (0D4C – 0D4A). Das bedeutet allerdings nicht, dass nur zwei Byte zwischen Daten- und Codesegment liegt - darin würde der Code auch keinen Platz finden. Wie wir im letzten Abschnitt gesehen haben, liegen die Segmente 16 Byte auseinander, weshalb DS und CS Segment tatsächlich 32 Byte auseinanderliegen.
Das DX-Register erhält diesmal den Wert 0, da die Daten durch die Trennung von Daten- und Codesegment nun ganz am Anfang des Segments liegen.
Der Rest des Programms entspricht dem einer COM-Datei. Beenden Sie deshalb anschließend den Debugger.
== Hello World in anderen Betriebssystemen ==
Die oben angegebenen Programme enthalten zwei verschiedene Systemabhängigkeiten: Zum einen logischerweise die Abhängigkeit vom Prozessor (es handelt sich um Code für den 80x86, der logischerweise nicht auf einem anderen Prozessor lauffähig ist), aber zusätzlich die Abhängigkeit vom verwendeten Betriebssystem (in diesem Fall DOS; beispielsweise wird obiger Code unter Linux nicht laufen). Um die Unterschiede zu zeigen, sollen hier exemplarisch Versionen von Hello World für andere Betriebssysteme gezeigt werden. Der verwendete Assembler ist in allen Fällen nasm.
Eine Anmerkung vorweg: Die meisten Betriebssysteme verwenden den seit dem 80386 verfügbaren 32-Bit-Modus. Dieser wird später im Detail behandelt, im Moment ist nur interessant, dass die Register 32 Bits haben und ein „e“ (für ''extended'' = erweitert) am Anfang des Registernamens bekommen (z. B. <tt>eax</tt> statt <tt>ax</tt>), und dass man Segmentregister in der Regel vergessen kann.
=== Linux ===
Unter Linux werden statt Segmenten sections verwendet (letztlich landet alles im selben 32-Bit-Segment). Die Code-Section heißt „<tt>.text</tt>“, die Datensection „<tt>.data</tt>“ und der Einsprungpunkt für den Code „<tt>_start</tt>“. Systemaufrufe benutzen int 80h statt des 21h von DOS, Werte werden in der Regel wie unter DOS über Register übergeben (wenngleich die Einzelheiten sich unterscheiden). Außerdem wird ein Zeilenende unter Linux nur mit einem Linefeed-Zeichen (ASCII 10) gekennzeichnet. Es sollte nicht schwer sein, die einzelnen Elemente des Hello-World-Programms im folgenden Quelltext wiederzuerkennen.
<syntaxhighlight lang="asm">
section .text
global _start
_start:
mov ecx, hello
mov edx, length
mov ebx, 1 ; Dateinummer der Standard-Ausgabe
mov eax, 4 ; Funktionsnummer: Ausgabe
int 80h
mov ebx, 0
mov eax, 1 ; Funktionsnummer: Programm beenden
int 80h
section .data
hello db 'Hello World!', 10
length equ $ - hello;
</syntaxhighlight>
Die folgenden Kommandozeilenbefehle bewirken das Kompilieren und Ausführen des Programms:
nasm -g -f elf32 hello.asm
ld hello.o -o hello
./hello
Für einen 64-Bit Prozessor sind folgende Kommandozeilenbefehle notwendig
nasm -g -f elf64 hello.asm
ld hello.o -o hello
./hello
Erläuterung: <tt>nasm</tt> ist wieder der Assembler. Er erzeugt hier die Datei <tt>hello.o</tt>, die man noch nicht ausführen kann. Die Option <tt>-g</tt> sorgt dafür, dass Debuginformationen in die zu erzeugende <tt>hello.o</tt>-Datei geschrieben werden. Der sogenannte Linker <tt>ld</tt> erzeugt aus <tt>hello.o</tt> die fertige, lauffähige Datei <tt>hello</tt>. Der letzte Befehl startet schließlich das Programm.
Hat man den [http://de.wikipedia.org/wiki/GNU_Debugger GNU Debugger] am Start, kann man per
gdb hello
ähnlich wie unter ''MS Windows'' debuggen. Der GDB öffnet eine Art Shell, in der diverse Befehle verfügbar sind. Der Befehl <tt>list</tt> gibt den von uns verfassten Assemblercode inklusive Zeilennummern zurück. Mit <tt>break 5</tt> setzen wir einen Breakpoint in der fünften Zeile unseres Codes. Ein anschließendes <tt>run</tt> führt das Programm bis zum Breakpoint aus, und wir können nun mit <tt>info registers</tt> die Register auslesen. Einen einzelnen Schritt können wir mit <tt>stepi</tt> ausführen.
'''(gdb) list'''
1 section .text
2 global _start
3 _start:
4 mov ecx, hello
5 mov edx, length
6 mov ebx, 1 ; Dateinummer der Standard-Ausgabe
7 mov eax, 4 ; Funktionsnummer: Ausgabe
8 int 80h
9 mov ebx, 0
10 mov eax, 1 ; Funktionsnummer: Programm beenden
'''(gdb) break 5'''
Breakpoint 1 at 0x8048085: file hello.asm, line 5.
'''(gdb) run'''
Starting program: /home/name/projects/assembler/hello_world/hello
Breakpoint 1, _start () at hello.asm:5
5 mov edx, length
'''(gdb) info registers'''
eax 0x0 0
ecx 0x80490a4 134516900
edx 0x0 0
ebx 0x0 0
esp 0xbf9e6140 0xbf9e6140
ebp 0x0 0x0
esi 0x0 0
edi 0x0 0
eip 0x8048085 0x8048085 <_start+5>
eflags 0x200292 [ AF SF IF ID ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x0 0
'''(gdb) stepi'''
_start () at hello.asm:6
6 mov ebx, 1 ; Dateinummer der Standard-Ausgabe
'''(gdb) quit'''
=== NetBSD ===
Die NetBSD-Version unterscheidet sich von der Linux-Version vor allem dadurch, dass alle Argumente über den Stack übergeben werden. Auch der Stack wird später behandelt; an dieser Stelle ist nur wesentlich, dass man mit <tt>push</tt>-Werte auf den Stack bekommt, und dass die Reihenfolge wesentlich ist. Außerdem benötigt man für NetBSD eine spezielle <tt>.note</tt>-Section, die das Programm als NetBSD-Programm kennzeichnet.
<syntaxhighlight lang="asm">
section .note.netbsd.ident
dd 0x07,0x04,0x01
db "NetBSD",0x00,0x00
dd 200000000
section .text
global _start
_start:
push dword length
push dword hello
push dword 1
mov eax, 4
push eax
int 80h
push dword 0
mov eax, 1
push eax
int 80h
section .data
hello db 'Hello World!', 10
length equ $ - hello;
</syntaxhighlight>
=== macOS (Intel 64bit) ===
macOS erfordert je nach Betriebssystemversion einen unterschiedlichen Einstiegspunkt in das Programm.
<syntaxhighlight lang="asm">
; Dateiname: HelloWorld.macOS.asm
global _main ; exportable macOS entry 10.8 and upper
global start ; exportable macOS entry 10.7 and lower
section .text
start: ; entry point macOS entry 10.7 and lower
_main: ; entry point macOS entry 10.8 and upper
mov rax, 0x02000004
mov rdi, 1
mov rsi, message
mov rdx, 13
syscall
mov rax, 0x02000001
xor rdi, rdi
syscall
section .data
message:
db "Hello, World", 10
</syntaxhighlight>
Um das Programm lauffähig zu machen rufen wir nacheinander den Assembler und Linker auf, wobei wir kein ELF Dateiformat sondern ein Macho-64bit Dateiformat für macOS benötigen.
<syntaxhighlight lang="bash">
nasm -f macho64 -o HW.obj HelloWorld.macOS.asm
ld -macosx_version_min 11.2.1 -static -o world.run HW.obj
</syntaxhighlight>
<noinclude>
{{Navigation zurückhochvor buch|
zurücktext= Der Prozessor |
zurücklink= ../_Der Prozessor |
hochtext=Assembler-Programmierung für x86-Prozessoren|
hochlink= ../#Inhaltsverzeichnis|
vortext= Rechnen mit dem Assembler |
vorlink= ../_Rechnen mit dem Assembler}}
</noinclude>
cispygboehfx62ouvf9f3zjo59654n2
Ing Mathematik: Zahlenbereiche
0
11387
1088534
1088520
2026-07-01T15:30:15Z
Intruder
1513
/* Reelle Zahlen */
1088534
wikitext
text/x-wiki
{{Navigation_zurückhochvor_buch|
zurücktext=Funktionen|
zurücklink=Ing_Mathematik:_Funktionen|
hochtext=Gesamtinhaltsverzeichnis|
hochlink=Ing:_Mathematik_für_Ingenieure|
vortext=Ungleichungen|
vorlink=Ing_Mathematik:_Ungleichungen}}
==Natürliche Zahlen==
[[File:Giuseppe Peano.jpg | mini | Giuseppe Peano (1858 - 1932) italienischer Mathematiker]]
Aus Wikipedia vom 27. September 2005, 10:04MEZ: Natürliche Zahl (weitergeleitet von Peano-Axiome):
''Es folgt eine Definition der Menge der natürlichen Zahlen <math>\mathbb{N}</math> durch Axiome, die erstmals 1889 von Giuseppe Peano angegeben wurde. Diese Axiome werden Peano-Axiome genannt.''
# ''0 ist eine natürliche Zahl''
# ''Zu jeder natürlichen Zahl n gibt es genau einen Nachfolger n', der ebenfalls eine natürliche Zahl ist.''
# ''Es gibt keine natürliche Zahl, deren Nachfolger 0 ist.''
# ''Zwei verschiedene natürliche Zahlen n und m besitzen stets verschiedene Nachfolger n' und m'. ''
# ''Enthält eine Menge X die Zahl 0 und mit jeder natürlichen Zahl n auch stets deren Nachfolger n', so enthält X bereits alle natürlichen Zahlen. (Ist X dabei selbst eine Teilmenge der natürlichen Zahlen, dann ist X gleich der Menge der natürlichen Zahlen.)''
Ob die Null zur Menge der natürlichen Zahlen gehört ist in der Literatur unterschiedlich festgelegt. Oft findet man auch die Unterscheidung
<math>\mathbb{N} = \{1,2,3,4,\ldots\}</math>
und
<math>\mathbb{N}_0 = \{0, 1,2,3,4,\ldots\}</math>
Die Addition und Multiplikation sind in <math>\mathbb{N}</math> unbeschränkt durchführbar. <math>a,b,c\in \mathbb{N}</math>
===Assoziativgesetze===
<math>(a+b)+c\ =\ a+(b+c)</math>
<math>(ab)c\ =\ a(bc)</math>
===Kommutativgesetze===
<math>a+b\ =\ b+a</math>
<math>ab\ =\ ba</math>
===Distributivgesetz===
<math>(a+b)c\ =\ ac\ +\ bc</math>
===Ordnungsrelation===
Die natürlichen Zahlen sind geordnet, es gilt stets genau eine der folgenden Beziehungen
<math>a=b;\; a<b;\; a>b</math>
===Neutrales Element bezüglich der Addition===
<math>a+0\ =\ a</math>
Null ist das neutrale Element bezüglich der Addition.
Die Subtraktion ist mit natürlichen Zahlen nicht uneingeschränkt möglich, z.B. <math>5-8\ =\ ?</math>. Also muss eine Erweiterung des Zahlenbereiches durchgeführt werden <math>\rightarrow \mathbb{Z}</math>.
==Ganze Zahlen==
Menge der ganzen Zahlen: <math>\mathbb{Z}=\{\ldots,-2,-1,0,1,2,\ldots\}</math>
Die Menge der natürlichen Zahlen ist eine echte Teilmenge der ganzen Zahlen <math>\mathbb{N} \subset \mathbb{Z}</math>.
Alle bereits behandelten Rechenregeln für <math>\mathbb{N}</math> gelten auch für <math>\mathbb{Z}</math>.
Zuätzlich ist nun auch die uneingeschränkte Subtraktion möglich.
Es fehlt aber noch die Division. Man kann z.B. noch keine Gleichung <math>ax\ = \ b; \; a\ne0</math> nach ''x'' uneingeschränkt auflösen.
Dies wird erst durch Erweiterung des Zahlenbereiches auf die rationalen Zahlen <math>\mathbb{Q}</math> ermöglicht.
==Rationale Zahlen==
Das System der rationalen Zahlen <math>\mathbb{Q}</math> ist die Menge von Zahlen in der Form <math>\frac{b}{a};\; a,b\in\mathbb{Z} \wedge a\ne0</math>.
Die ganzen Zahlen <math>\mathbb{Z}</math> sind eine echte Teilmenge der rationalen Zahlen <math>\mathbb{Q}</math>. Die ganzen Zahlen können als <math>\frac{b}{1}</math> aufgefasst werden.
Alle Rechenregeln der ganzen Zahlen <math>\mathbb{Z}</math> können für die rationalen Zahlen <math>\mathbb{Q}</math> übernommen werden. Zusätzlich führt die Division nicht aus dem Bereich der rationalen Zahlen <math>\mathbb{Q}</math> heraus.
Ein Zahlsystem, im dem zwei Operationen (Addition, Multiplikation), sowie ihre Umkehrungen (Subtraktion, Division mit Ausnahme von Null) unbeschränkt durchführbar sind, heißt Zahlkörper.
Alle rationalen Zahlen können Punkten auf einer Zahlengeraden so zugeordnet werden, dass jeder rationalen Zahl ein Punkt entspricht. Aber nicht jeder Punkt der Zahlengeraden läßt sich durch eine rationale Zahl darstellen, so ist zum Beispiel <math>\sqrt{2}</math> keine rationale Zahl. Dies führt zu einer Erweiterung der rationalen Zahlen auf die reellen Zahlen <math>\mathbb{R}</math>.
==Reelle Zahlen==
Jedem Punkt auf einer Zahlengeraden ist genau eine reelle Zahl zugeordnet, sie erfüllen die Zahlengerade stetig. Die Menge der reellen Zahlen wird durch das Symbol <math>\mathbb{R}</math> gekennzeichnet.
Eine Zahl <math>x\ \in\mathbb{R}\backslash\mathbb{Q}</math> nennt man {{W|irrationale Zahl}}. Diese wiederum untergliedern sich in
* {{W|Algebraische Zahl|algebraische Zahlen}} (z.B. <math>\sqrt{2}</math>)
* {{W|Transzendente Zahl|transzendente Zahlen}} (z.B. <math>\pi,\; \text{e}</math>).
===Wichtige Rechenregeln===
* Verbot einer Division durch Null.
* Kürzungsregel für die Addition: <math>x+y=x+z\; \Rightarrow\; y=z </math>
* Kürzungsregel für die Multiplikation: <math>(xy=xz) \wedge x\ne0\; \Rightarrow\; y=z </math>
* <math>-\left(-x\right) = x</math>
* <math>-x = \left(-1\right)x</math>
* <math>\frac{x}{y}+\frac{z}{w}=\frac{xw+zy}{yw}</math>
===Anordnungsaxiome===
Für <math>x,y,z\in\mathbb{R}</math> gilt
* Reflexivität: <math> x\le x</math>
* Transitivität: <math> x\le y ,\; y\le z\; \Rightarrow\; x\le z </math>
* Antisymmetrie: <math> x\le y\ \wedge\ y\le x\; \Rightarrow\; x=y </math>
* Totalordnung: <math>(x\le y) \oplus (y<x)</math>
* Monotonie der Addition: <math>(x\le y)\; \Rightarrow\; x+z\le y+z</math>
* Monotonie der Multiplikation: <math>(x\le y)\wedge(z\ge 0)\; \Rightarrow\; xz\le yz</math>
Auch mit den reellen Zahlen <math>\mathbb{R}</math> können etliche mathematische Probleme nicht ausreichend beschrieben werden. So gibt es zum Beispiel in <math>\mathbb{R}</math> keine Zahl ''x'' mit der die Gleichung <math>x^2+1=0</math> lösbar ist. Dies führt zu einer Erweiterung des Zahlenbereiches auf die komplexen Zahlen <math>\mathbb{C}</math>. Genaueres dazu findet sich z.B. im Kapitel [[Ing_Mathematik:_Komplexe_Zahlen]]. Dem Rechnen mit komplexen Zahlen ist ein eigenes mathematisches Fachgebiet gewidmet - nämlich die Funktionentheorie (auch komplexe Analysis genannt). Siehe zu einer Einführung in dieses Gebiet auch den dritten Band dieser Buchreihe.
== Intervalle ==
===Beschränkte Intervalle===
Es gelte <math>a, b \in \mathbb{R}\; \wedge\ a<b</math>. ''a'' und ''b'' sind die Endpunkte und ''b''-''a'' die Länge des Intervalls.
* Abgeschlossenes Intervall: <math>[a, b] \Leftrightarrow \{x\;|\;a\le x\le b\} </math>
* Offenes Intervall: <math>(a, b) \Leftrightarrow \{x\;|\;a < x < b\} </math>
* Halboffene Intervalle: <math>\begin{cases}[a, b) \Leftrightarrow \{x\;|\;a\le x < b\} \\ (a, b] \Leftrightarrow \{x\;|\;a < x\le b\} \end{cases}</math>
===Unbeschränkte Intervalle===
Es gelte <math>a \in \mathbb{R}</math> und für das Unendlichkeitssymbol <math>\infty\notin \mathbb{R}</math>.
* Abgeschlossene unbeschränkte Intervalle: <math>\begin{cases}[a, \infty) \Leftrightarrow \{x \;|\; x \ge a\} \\ (-\infty,a] \Leftrightarrow \{x \;|\; x \le a\} \end{cases}</math>
* Offene unbeschränkte Intervalle: <math>\begin{cases}(a, \infty) \Leftrightarrow \{x\;|x > a\} \\ (-\infty,a) \Leftrightarrow \{x\;|x < a\} \end{cases}</math>
{{Navigation_zurückhochvor_buch|
zurücktext=Funktionen|
zurücklink=Ing_Mathematik:_Funktionen|
hochtext=Gesamtinhaltsverzeichnis|
hochlink=Ing:_Mathematik_für_Ingenieure|
vortext=Ungleichungen|
vorlink=Ing_Mathematik:_Ungleichungen}}
fsj28ibok3mwmfjyoueqpsmlnlq0tqb
Gitarre: Akkordprogressionen
0
67144
1088531
1088526
2026-07-01T12:18:08Z
Mjchael
2222
/* Exkurs: Wie funktioniert die Methode mit den Akkordstufen-zurufen? */
1088531
wikitext
text/x-wiki
{{:Gitarre/ Navi|Rockballadendiplom|
{{:Gitarre: Rockballadendiplom/ Navi}}|
{{:Gitarre: Rockballadendiplom/ Akkordprogressionen}}|
img=Rockballadendiplom.gif|bg=#dddddd|border=#F29E00|color=#F29E00|px=100}}
= Akkordprogressionen =
Hier folgen ein paar gängige Akkordfolgen, die du bei vielen Liedern im Refrain oder in den Strophen antriffst. Oft wird sogar das ganze Lied mit ein und derselben Akkordfolge begleitet.
Es gibt hier auch einigen weniger gebräuchlichen Akkordfolgen, dessen Lieder jedoch recht bekannt sind.
Solche Akkordfolgen sind durch die ständige Wiederholungen in der Regel recht leicht zu lernen. Sie helfen dir, typische Spielsituationen zu meistern. Sobald du eine Akkordfolge benennen und spielen kannst, erkennst du sie auch leichter wieder. Du hangelst dich nicht mehr von einem Akkord zum nächsten, sondern du betrachtest die nächsten drei oder vier Akkorde als eine zusammenhängende Einheit.
Für jede Akkordfolge werden nur einige möglichst praktikable Fingersätze für Gitarre aufgezeigt. Viele davon lassen sich mit einfachen Akkorden nachspielen (ggf. mit Capo). Andere lassen sich besonders gut mit Barré-Akkorden nachvollziehen.
Es wird deine Aufgabe sein, alternative Fingersätze zu finden, oder herauszufinden, ob es interessante Bassläufe, Hammerings oder andere Verzierungen gibt. Finde heraus, wann es sich lohnt diese Akkordfolge mit Barré-Akkorde zu spielen, oder besser mit einfachen Akkorden. Du musst dir nicht alles selbst erarbeiten, sondern achte darauf, wie ein Interpret diese Akkordfolge einsetzt, welche Lage bzw. welchen Fingersatz (Voicings) er gebraucht, was für Rhythmen er dafür verwendet, und wie er sie weiter verziert.
Weiterhin dient diese Zusammenstellung dazu, geeignete Übungsstücke für den Gitarrenunterricht zu finden. Sobald du eine gängige Akkordfolge gelernt hast, findest du leicht weitere Übungsstücke.
Für den Barré-Unterricht wäre beispielsweise der Spanier (Am G F E) als Anfang ganz interessant. Dannach der 66-45er (Am Am F G) und seine Varianten, und danach die Punk-Pop-Formel (C G Am F oder Am F C G). So kannst du dir recht zügig ein Repertoire aufbauen.
Die Akkordfolgen sind auch ein guter Ausgangspunkt für Improvisationen und Solos.
== Exkurs: Wie funktioniert die Methode mit den Akkordstufen-zurufen? ==
Anstatt die Tonstufen anzugeben (beispielsweise: I-VI-II-V), habe ich hier die Kurzform gewählt, wie sie sich einige Bands zurufen, die mit dem vereinfachten {{w|en:Nashville Number System|Nashville-Number-System}} vertraut sind. (z.B. "einen 16-25er in C"). Da einigen diese Methode noch nicht geläufig sein dürfte, möchte ich sie hier noch einmal erläutern.
Wir verwenden eine vereinfachte Methode. Die Zahlen 1 bis 7 geben die Tonstufen einer Dur-Tonart wieder. Dieses wird vereinzelt als ionisches System bezeichnet.
Jede dieser Akkordstufen hat nach der {{w|Akkord-Skalen-Theorie}} eine bestimmte Funktion und einen bestimmten Modus. Wir gehen also ähnlich wie Notenleser vor. Zuerst bestimmen diese anhand der Vorzeichen im Notensystem die Dur-Tonart. Erst im zweiten Schritt werden anhand der Akkorde oder anhand der Tonfolge überprüft, ob gegebenenfalls ein anderer Modus vorliegt. Wir betrachten hier also jede Akkordfolge aus Sicht der zuvor gefunden Durtonleiter.
;Anmerkung: Wenn du später mal komplexere Arrangements aus der Klassik oder Jazz analysieren willst, dann wird dir im Studium die Stufentheorie begegnen. Dabei wird insbesondere bei Kirchentonarten und Molltonarten der Grundton bzw. das tonale Zentrum immer als I (1) definiert und man rechnet die anderen Tonstufen relativ zur gefundenen I (1) aus. Tonleiterfremde Akkorde und Töne lassen sich so besser darstellen. Doch das wollen wir hier in diesem Kapitel noch nicht analysieren. Die folgenden Akkordprogressionen sind alle viel einfacher gestrickt.
Was ein i-VIIb-VIb-V4-3 ist, lässt sich weder leicht erfassen, noch schnell aussprechen. Ein 65-43er abgeleitet von der zugrundeliegenden Durtonart ist da schlichtweg einfacher. Im Netz und in der Literatur findet man jedoch beide Systeme.
:Hobbygitarristen ziehen für diese Lektion aus der Stufentheorie nur wenig Nutzen. Um als Student oder Profimusiker mit der Stufenteorie richtig umzugehen zu können, wird ein Vorverständnis der Tonleitern gebraucht, dass wir uns hier als Hobbygitarristen erst erarbeiten wollen. Es reicht aus, sich eingehender um die Stufenteorie zu kümmern, wenn du dich stärker mit Blues und Jazzharmonik befasst.
:vgl. <span class="noprint">'''Y<span style="background-color:red; color:#FFFFFF;">T</span>''' </span> [https://www.youtube.com/watch?v=K8hHMx5CaSI Six Chords (Benny Davis from The Axis of Awesome)] bezieht sich in diesem Video immer auf die zugrundeliegende Durtonleiter. <span class="noprint">'''Y<span style="background-color:red; color:#FFFFFF;">T</span>''' </span> [https://m.youtube.com/watch?v=Vyc8lezaa9g 7 super common chord progressions... (David Bennett)] verwendet in diesem Video das ionische System (mit zugrundeliegender Durtonleiter) und die Stufentheorie (die immer mit I (1) anfängt) unkommentiert nebeneinander.
=== Alles beginnt mit der Durtonleiter ===
;Also wir leiten hier in dieser Lektion alles von der zugrundeliegenden Durtonart ab.
<score sound="1">
\relative c'{
\tempo 1 = 100
%%Tempo ausblenden
\set Score.tempoHideNote = ##t
c1 d e f g a b c
}
\addlyrics { "C=1" "D=2" "E=3" "F=4" "G=5" "A=6" "B=7" "C=8=1"}
</score>
:<small>englisches B = deutsches H</small>
In der Harmonielehre werden die Tonstufen meist in römischen Ziffern angegeben.
<score sound="1">
\relative c''{
\tempo 1 = 100
%%Tempo ausblenden
\set Score.tempoHideNote = ##t
\key g \major
g1 a b c d e fis g}
\addlyrics { "G=I" "A=II" "B=III" "C=IV" "D=V" "E=VI" "F#=VII" "G=I"}
</score>
=== Akkordstufen ===
Jedem Ton kann man einen Dreiklang bzw. einen Akkord zuordnen und somit jedem Akkord eine Akkordstufe.
<score sound="1">
{ <<
\new ChordNames {
\chordmode {
c1 d:m e:m f g a:m b:dim c'
}
}
\new Staff \chordmode {
\tempo 1 = 100
%%Tempo ausblenden
\set Score.tempoHideNote = ##t
c1 d:m e:m f g a:m b:dim c'
}
\addlyrics { I II III IV V VI VII I}
>> }
</score>
Die 1. Stufe wird Tonika (T) genannt, die 4. Stufe Subdominante (S) und die 5. Stufe Dominante (D). Sollte dir das nicht vertraut sein, dann wiederhole doch die [[Gitarre: Die Dur-Kadenz - Das große Dreigestirn|zweite Anfängerlektion]] vom Lagerfeuerdiplom, wo die Durkadenz eingehend besprochen wurde.
<score sound="1">
{ <<
\new ChordNames {
\chordmode {
g1 a:m b:m c d e:m fis:dim g'
}
}
\new Staff \chordmode {
\tempo 1 = 100
%%Tempo ausblenden
\set Score.tempoHideNote = ##t
\key g \major
g1 a:m b:m c d e:m fis:dim g
}
\addlyrics { I II III IV V VI VII I}
\addlyrics { T s d S D t dim T}
>> }
</score>
Die 6.Stufe wird Tonika-Parallele (t) genannt (engl. Submediant) , die 2. Stufe Subdominannten-Parallele (s) (engl. Supertonic) und die 3. Stufe Dominanten-Parallele (d) (engl. Mediant). Auch die [[Gitarre: Mollparallelen|Mollparallelen]] wurden schon in den Anfängerlektionen des Folkdiploms besprochen.
Zusätzlich sollte man wissen, dass die Akkorde einer Dur-Tonleiter immer in einer ganz bestimmten Reihenfolge angeordnet sind (siehe Beispiele).
; 1=Dur, 2=Moll, 3=Moll, 4=Dur, 5=Dur, 6=Moll, 7=Dim (vermindert)
===Septim-Akkorde===
Weiterhin werden die typischen Septimen der Akkorde als bekannt vorausgesetzt.
;1=Dur-j7, 2=m7, 3=m7, 4=Dur-j7, 5=Dur7, 6=m7, 7=dim7
Die 7. Akkordstufe ist dir möglicherweise bei Skalenübungen oder Triads begegnet. Ein B° = Bdim = Bm5<sup>b</sup> ist ein Mollakkord mit verminderter Quinte (5b) (engl. diminished). Er wird in vielen Fällen wie ein Dur7-Akkord ohne Grundton angesehen, und in den meisten einfachen Chordsheets durch den entsprechenden Dur⁷ ersetzt.
* G⁷ = G+B+D+F
* B° = __B+D+F = G⁷(no root)
<score sound="1">
{ <<
\new ChordNames {
\chordmode {
c1:maj7 d:m7 e:m7 f:maj7
g:7 a:m7 b:m7.5- c':maj7
}
}
\new Staff \chordmode {
\tempo 1 = 100
%%Tempo ausblenden
\set Score.tempoHideNote = ##t
c1:maj7 d:m7 e:m7 f:maj7
g:7 a:m7 b:m7.5- c':maj7
}
\addlyrics { I II III IV V VI VII I}
>> }
</score>
In der Harmonielehre werden oft römische Ziffern genutzt. Optional können einige auch mit kleinen Buchstaben geschrieben werden, um damit Mollakkorde anzuzeigen. Dieses erübrigt sich, wenn die Akkorde mit angegeben werden. In generellen Übersichten verzichtet man meist auf eine Kleinschreibung, da man in Einzelfällen mit Zwischendominanten bzw. Dominantseptakkorden rechnen muss.
<score sound="1">
{ <<
\new ChordNames {
\chordmode {
g1:maj7 a:m7 b:m7 c:maj7 d:7 e:m7 fis:m7.5- g:maj7
}
}
\new Staff \chordmode {
\tempo 1 = 100
%%Tempo ausblenden
\set Score.tempoHideNote = ##t
\key g \major
g1:maj7 a:m7 b:m7 c:maj7 d:7 e:m7 fis:dim7.5- g:maj7
}
\addlyrics { I ii iii IV V vi vii I}
\addlyrics { T s d S D t dim T}
>> }
</score>
Wir verwenden diese Bezeichnungen auch im modalen Kontext, was den Vergleich der Stufen und ihre Übertragung als Skala auf dem Griffbrett erleichtert.
Ich brauche dir wohl nicht erklären, dass die Drei- und Vierklänge stellvertretend für alle Möglichkeiten stehen, einen Akkord auf der Gitarre zu spielen, was Oktaven, Umkehrungen und Voicings angeht. (Ich erwähne es nur für die Quereinsteiger, die diese Lektion im Netz gefunden haben.) Z.B. wie wir die Akkordstufen der G-Dur-Tonleiter mit einfachen Akkorden praktisch umsetzen könnten.
<score>
<<
\new ChordNames { \chordmode {
g2:maj7 a:m7 b:m7 c:maj7 d:7 e:m7 fis:m7.5- g:maj7
}}
\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
< g,-3 b,-2 d g b fis'-1 > % Gj7
< a, e-2 g c'-1 e' > % Am7
< b,-1 d a-2 d'-4 fis'-3 > % Bm7
< c-3 e-2 g b e' > % Cj7
< d a-2 c'-1 fis'-3 > % D7
< e, b,-2 d g b e'> % Em7
< fis,-2 e-3 a-4 c'-1 e'> % F#m7b5
< g,-3 b,-2 d g b fis'-1> % G7
}\addlyrics { I II III IV V VI VII I}
>>
</score>
Die Akkorde mit großer Septime (j7 = maj7 = major7 = ∆) sowie der verminderten Akkord (dim7 = m7b5 = ∅) kommen seltener in einfachen Schlager-, Rock- und Popsongs vor. Man findet sie eher in jazzigen Musikrichtungen.
Die m7- und 7er-Akkorde kommen dagegen sehr häufig vor. Die Frage, ob man die kleine Septime (7) nun mitspielt oder nicht ist vielfach beliebig und hängt mehr vom Musikstil ab. In bestimmten Akkordkombinationen sind bestimmte Akkorderweiterungen und bestimmte Spielfiguren wie Bassläufe, Wechselbass, Hammerings etc. typisch.
Musikern reichen für die grobe Orientierung die einfachen Akkordstufen sowie die Ausgangstonart aus, um zu wissen, was sie spielen sollen. Sie fügen selbstständig diverse Verzierungen hinzu (Bassläufe, Voicings, Hammer On...).
===Kurzform (wie Jahreszahlen)===
Um sich eine Akkordfolge zuzurufen, sind die einzelnen Stufen recht umständlich.
:"Jetzt spielen wir erste Stufe, sechste Stufe, zweite Stufe, fünfte Stufe... "
das ist einfach zu lang
:1 6 2 5
das ist schon kürzer, aber es klingt wie eine Telefonnummer, die man sich schwer merken kann.
Nur die Akkorde zu nennen ginge zwar auch, aber es kommt öfter mal vor, dass man mitten in der Probe ein Stück ein paar Töne höher oder tiefer spielt, um sich der Gesansstimme des Interpreten anzupassen. Nicht selten verwendet ein Gitarrist ein Capo oder ein Keyboardspieler eine Transponierfunktion um die Tonart bzw. den Fingersatz zu vereinfachen. Zudem kann man die Akkordstufen durch alle Tonarten nutzen.
Bei einigen Bands hat es sich eingebürgert, statt Akkordnamen die Stufenakkorden wie eine Jahreszahl auszusprechen. Dazu werden die Ziffern einfach zusammengezogen.
: Aus '''1 6 2 5''' wird ein '''16-25er'''
und es wird im englischen eben so ausgesprochen wie eine Jahreszahl
:(In the year) 1625
Wir schenken uns im Deutschen das "hundert" der Jahreszahl und sagen statt "sechzehn-hundert-fünfundzwanzig" kurz
:einen 16-25er in C
Das bedeutet die Akkordfolge C Am Dm G, was aber nichts anderes als die erste, sechste, zweite und fünfte Akkordstufe der C-Dur-Tonleiter ist.
:C=1, Dm=2, Em=3, F=4, G7=5, Am=6, Bm7b5=7
Dieses ist eine Methode, sich Akkordfolgen schnell zuzurufen. Die Methode lässt sich so lange anwenden, solange sie praktisch ist.
Wenn man aber erst einen Taschenrechner rausholen muss, um sich die Akkordstufen auszurechnen, dann sollte man sich was anderes einfallen lassen.
Oft gibt es "Spitznamen" für bestimmte Akkordfolgen, die mehr oder weniger gebräuchlich sind, und manchmal praktischer sind als die Akkordstufen-Kurzform.
{{:Gitarre:_Akkordprogressionen/ Ein 15-45er (I-V-IV-V)}}
{{:Gitarre:_Akkordprogressionen/ Ein 14er (I-IV)}}
{{:Gitarre:_Akkordprogressionen/ Ein 14-55er}}
{{:Gitarre:_Akkordprogressionen/ Ein 54-11er bzw. 54-15}}
{{:Gitarre:_Akkordprogressionen/ 12-Bar Blues}}
{{:Gitarre:_Akkordprogressionen/ Ein 15er}}
{{:Gitarre:_Akkordprogressionen/ Ein 12-41er}}
{{:Gitarre:_Akkordprogressionen/ Ein 16-45er (50s Progression/Ice Cream Changes)}}
{{:Gitarre:_Akkordprogressionen/ Diatonischer Basslauf}}
{{:Gitarre:_Akkordprogressionen/ Ein 45-16er}}
{{:Gitarre:_Akkordprogressionen/ Ein 12-45er}}
{{:Gitarre:_Akkordprogressionen/ Die II-V-I-Verbindung in Dur}}
{{:Gitarre:_Akkordprogressionen/ Ein 16-25er (Rhythm Changes)}}
{{:Gitarre:_Akkordprogressionen/ Ein 13-25er}}
{{:Gitarre:_Akkordprogressionen/ Die Pop-Punk-Progression}}
{{:Gitarre:_Akkordprogressionen/ Varianten der Pop-Punk-Progression}}
{{:Gitarre:_Akkordprogressionen/ Die Millenium-Akkordfolgen}}
{{:Gitarre:_Akkordprogressionen/ Die Pachelbel-Folge}}
{{:Gitarre:_Akkordprogressionen/ Quintfall 25-11er-Kette}}
{{:Gitarre:_Akkordprogressionen/ Diatonischer Quintfall}}
{{:Gitarre:_Akkordprogressionen/ Eine Ragtime-Progression}}
{{:Gitarre:_Akkordprogressionen/ Ein 65er und ein 21er}}
{{:Gitarre:_Akkordprogressionen/ Ein 65-43er (die andalusische bzw. spanische Kadenz)}}
{{:Gitarre:_Akkordprogressionen/ Varianten mit 4 5 6}}
== Siehe auch ==
*{{B|Gitarre: Akkorde heraushören|Akkorde heraushören}}
*{{B|Gitarre: Tonleiter-fremde Akkorde|Typische Tonleiter-fremde Akkorde}}
*{{B|Gitarre: Akkorde heraushören|Akkordfolgen erweitern}}
*[http://www.doubleestudios.com/most_excellent_songs/ Bob Egan's MOST EXCELLENT LIST OF 3-CHORD and 4-CHORD SONGS]
<noinclude>
===Einzelne Links für Referenzen===
{{:Gitarre/ Navi|Rockballadendiplom|
{{:Gitarre: Rockballadendiplom/ Akkordprogressionen/ Navi}}
|img=Rockballadendiplom.gif|bg=#dddddd|border=#F29E00|color=#F29E00|px=100}}
</noinclude>
{{Fußnoten}}
b1ephcedv4ml4ryps1qpw7t7iccfolx
Gitarre: Liedervorschläge/ Lieder mit Fis-Moll
0
73972
1088539
1088388
2026-07-02T05:26:23Z
Mjchael
2222
/* Lieder mit F#m */ Dubkette
1088539
wikitext
text/x-wiki
=== [[Gitarre: der Fis-Moll-Akkord|Lieder mit F#m]] ===
{{todo|Geeignete Copyright-freie Lieder suchen|Mjchael|Rockdiplom}}
::<div style="margin-left:-2.5em;">'''Nur F#m'''</div>
# [[Liederbuch/ Child In The Manger|Child In The Manger]] (engl. Weihnachtslied Melodie von Morning has broken)
# {{Youtube-Suche|99+Luftballons+Nena|99 Luftballons (Nena)}} '''E F#m A H7''' {{grün|(!!!)}}
# {{Youtube-Suche|80+Millionen+Max+Giesinger|80 Millionen (Max Giesinger)}} '''D A E F#m''' {{grün|(!!!)}}
#:<div style="margin-left:-2.5em;">'''incl. Bm'''</div>
# [[Liederbuch/ Red Is The Rose|Red Is The Rose]]
# {{Youtube-Suche|Everytime+Britney+Spears|Everytime (Britney Spears)}} (Capo 3)<br />'''(D - A - D - Bm) 2x (F#m - D) 2x (D - A - Bm - F#m - G - A) 2x (D - A - D - Bm) ... (F#m - D) 2x ... '''
# {{Youtube-Suche|Go+West+Pet+Shop+Boys|Go West (Pet Shop Boys)}} ''' D - A - Bm - F#m | G - D - Em - A'''
# {{Youtube-Suche|Streets+of+London+Ralph+McTell|Streets of London (Ralph McTell)}} ''' D - A - Bm - F#m | G - D - Em - A''' ...
# {{Youtube-Suche|Halo+Beonce|Halo (Beonce)|chords=1}} A Bm F#m D
# {{Youtube-Suche|Hey+There+Delilah+Plain+White+T's)|Hey There Delilah (Plain White T's)}} ''' D - F#m - D - F#m | Bm - G - A - Bm - A''' ...
# {{Youtube-Suche|light+my+fire+doors|Light My Fire (Doors)}} '''Am F#m ''' (4x) '''G A D - | G A D Bm | G D E E7'''
#:<div style="margin-left:-2.5em;">'''Achtung! F#-Dur! (kommt nur ein Finger mit hinzu)'''</div>
# {{Youtube-Suche|Hotel+California+Eagles|Hotel California (Eagles)}}Verse: Bm F# A E G D Em F# Chorus:G D Em Bm7 G D Em F#
# {{Youtube-Suche|It+never+rains+in+southern+California+Albert+Hammond|It never rains in southern California (Albert Hammond)}} meist '''Bm (E E7) A A''' im Refrain einmal '''Bm E7 A F#m'''
# {{Youtube-Suche|Come+As+You+Are+Nirvana|Come As You Are (Nirvana)}}
# {{Youtube-Suche|Iris+Goo+Goo+Dolls|Iris (Goo Goo Dolls)}}
# {{Youtube-Suche|Maggie+Mae+Rod+Stewart|Maggie Mae (Rod Stewart)}}
# {{Youtube-Suche|The+Power+of+Love+Jennifer+Rusch|The Power of Love (Jennifer Rusch)}}
# {{Youtube-Suche|Wherever+You+Will+Go+The+Calling|Wherever You Will Go (The Calling)}}
# {{Youtube-Suche|Pompeii+Bastille|Pompeii (Bastille)}}
# {{Youtube-Suche|Maria+Blondie|Maria (Blondie)}}
# {{Youtube-Suche|Get+Lucky+Daft+Punk|Get Lucky (Daft Punk)}}
# {{Youtube-Suche|Galway+Girl+Ed+Sheeran|Galway Girl (Ed Sheeran)}}
# {{Youtube-Suche|Wonderwall+Oasis|Wonderwall (Oasis)}}
# {{Youtube-Suche|Cheap+Thrills+Sia|Cheap Thrills (Sia)}}
# {{Youtube-Suche|Nur+in+meinem+Kopf+Andreas+Bourani|Nur in meinem Kopf (Andreas Bourani)}} '''D A E F#m'''
# {{Youtube-Suche|Raucher+Falk|Raucher (Falk)}}(Capo=1; 3/4) '''Bm Em F#m Bm (2x) | Em Bm G F#(m) Bm'''
<!-- # {{Youtube-Suche|| ()}} -->
<noinclude>
{{Notiz|
# Diese Vorlage wird zum einen in der aktuellen Lektion verwendet.
# Dann wird sie in der Zusammenfassung des [[Gitarre: Rockdiplom Liedbeispiele|Rockdiploms]] gebraucht
# und zuletzt wird es für den [[Gitarre: Liedervorschläge|Gesamtüberblick]] benötigt
Diese Vorlage erleichtert es die Listen aneinander anzugleichen.}}
[[Kategorie:Bucheigene Vorlage]]
</noinclude>
2yoco0ks3t1irc8mefajiy0thzsvv3w
Digitale bildgebende Verfahren
0
81695
1088550
1088493
2026-07-02T09:36:29Z
Dirk Hünniger
48754
1088550
wikitext
text/x-wiki
{{Infoleiste|Physik|Studium|S|Technik}}
{{:Digitale_bildgebende_Verfahren/ Navigation}}
{{Druckversion}}
{{Hinweis PDF|Digitale_bildgebende_Verfahren.pdf}}
{{Überschriftensimulation 1|Zusammenfassung des Projekts}}
{{StatusBuch|10}}
* '''Zielgruppe und Lernziele:''' siehe [[Digitale bildgebende Verfahren: Vorwort|Vorwort]].
* '''Ansprechperson:''' Ansprechpartner ist [[Benutzer:Bautsch]].
* '''Co-Autoren:''' Mitarbeit und Kommunikation mit Sie-Form sind erwünscht, vernünftige Orthographie und nicht kategorisch neue Schulschreibung.
* '''Verwendete Vorlagen:''' [[Digitale bildgebende Verfahren/ Navigation]]
[[Kategorie:Buch]]
[[Kategorie:Studium]]
9hzpw41wjg0a67p8qur6zn5mzm4txyp
Benutzer Diskussion:Bautsch
3
81696
1088535
984802
2026-07-01T15:57:13Z
Dirk Hünniger
48754
Neuer Abschnitt /* Neues PDF von Bildgebende Verfahren */
1088535
wikitext
text/x-wiki
== Willkommen ==
<div>
{| {{DesignBewertung}}
| [[Datei:Wikibooks-logo-en-noslogan.svg|135px]]
|<div style="padding:1ex 1em;">Hallo Bautsch,
[[Hilfe:Willkommen|Willkommen]] bei Wikibooks. Diese Nachricht ist nicht automatisch erstellt, sondern es gibt in Wikibooks Benutzer, die sich Zeit für die neu Dazugekommenen nehmen, dich begrüßen, Fragen beantworten, einfach für dich da sind. Zunächst mal hoffe ich, dass du hier interessante Bücher zum Lesen findest. Die beste Unterstützung ist [[Hilfe:Willkommen#Kritisch_lesen|kritisches Lesen]], jeder kann es!
Du hast dich also entschieden, [[Hilfe:Warum inhaltsoffene Lehrbücher? | inhaltsoffene Lehrbücher]] zu erstellen bzw. Korrektur zu lesen? Viele nützliche Informationen für Autoren findest du im [[Hilfe:Wikibooks-Lehrbuch | Wikibooks-Lehrbuch]] und auf dem [[Hilfe:Merkzettel|Merkzettel zum Ausdrucken]]. Im Lehrbuch werden auch die vielen [[Hilfe:Menüpunkte|Menüpunkte]] erklärt, die du am oberen und linken Rand siehst. Auf dem [[Wikibooks:Portal|Portal für Autoren]] kannst du im Abschnitt [[Wikibooks:Portal/ Beteiligen|Beteiligen und Mitgestalten]] Anregungen finden. Es gibt auch eine Liste mit [[Wikibooks:Verwaiste Bücher|verwaisten Büchern]], die auf einen neuen Autor warten.
Wenn du eine Anleitung vermisst oder weitere Hilfe brauchst, '''zögere nicht''', deine Fragen auf [[Wikibooks:Ich brauche Hilfe]] zu stellen. Natürlich kannst du auch mir ([[Benutzer:Juetho|Jürgen]]) persönlich deine Fragen stellen.
Falls du Autor werden willst, solltest du besonders beachten:
:* [[Hilfe:Wikibooks-Lehrbuch/ Navigation Regeln|Grundsätzliches kurz und knapp]]
:* [[Hilfe:Wikibooks-Lehrbuch/ Navigation Statut|Was Wikibooks ist und was wir hier tun]]
:* [[Hilfe:Wikibooks-Lehrbuch/ Navigation Neues Buch|Wie man ein neues Buch beginnt]]
Die neuesten Nachrichten findest du in der [[Wikibooks:Rundschau|Rundschau.]] Mit anderen kommunizieren kannst du über den [[Wikibooks:Chat|Chat]] und über die [[mail:wikibooksde-l|Mailingliste]].
{{#if: Danke für deine Mitarbeit!|<p>Danke für deine Mitarbeit!</p> }}
Erfolg und viel Spaß wünscht [[Benutzer:Juetho|Jürgen]] 13:35, 31. August 2011</div>
|}
</div>
== [[Digitale bildgebende Verfahren]] ==
Ich würde mich freuen, wenn es sich dabei nicht nur um eine Stoffsammlung als "Schnellschuss" handelt, sondern die Themen mit Inhalt gefüllt werden. Ich bitte dich aber, den Buchanfang zu vervollständigen:
* Die '''[[Vorlage:Projektdefinition|Projektdefinition]]''' ist zu vervollständigen.
* In der '''Infoleiste''' ist ein Regal einzutragen, ebenso Angaben zur Zielgruppe und zum Typ des Buches. Erläuterungen dazu stehen bei der [[Vorlage:Infoleiste]].
* Die potenziellen Leser und (Mit-) Autoren sollen das Buch finden können. Dazu solltest du das Buch in einem passenden '''[[Wikibooks:Bücherregale|Regal]]''' eintragen, nämlich demselben, das in der Infoleiste aufgeführt wird.
Recht herzlichen Dank und guten Fortschritt! -- [[Benutzer:Juetho|Jürgen]]
: Du kommst ja gut in Schwung, prima! Aber im [[Regal:Physik]] steht dein Buch noch nicht. Bitte trage das noch ein. -- Danke! [[Benutzer:Juetho|Jürgen]] 18:05, 2. Okt. 2011 (CEST)
== Vorschaufunktion ==
[[Datei:Vorschau.png|thumb|200px|Vorschau-Button]]
Hallo {{PAGENAME}}, mir ist aufgefallen, dass du kurz hintereinander mehrere kleine Bearbeitungen an der {{#if: [[Benutzer:Juetho|Jürgen]] 18:05, 2. Okt. 2011 (CEST) | Seite [{{SERVER}}{{localurl:Digitale bildgebende Verfahren: Aufnahme|action=history}} Digitale bildgebende Verfahren: Aufnahme] | gleichen Seite}} vorgenommen hast. Wir freuen uns über jede Verbesserung, wer immer sie vornimmt, und möchten deinen Tatendrang keinesfalls bremsen. Wenn es dir '''keine große Mühe ist''', wäre es schön, wenn du in Zukunft die [[Hilfe:Menüpunkte#Anker:Vorschau| Vorschaufunktion]] benutzt. Du weißt vermutlich nicht, dass bei jeder, ''auch bei der kleinsten Änderung'' der gesamte Text der Seite erneut in der Datenbank gespeichert wird. Also gehe bitte sparsam mit spendenfinanziertem Speicherplatz um. Wenn du an einer Seite Bearbeitungen in mehreren Abschnitten planst, benutze bitte nicht nacheinander die einzelnen „Bearbeiten“-Buttons am rechten Rand, sondern das „Bearbeiten“ über der Seite. Dadurch werden die [[w:Hilfe:Versionen|Versionsgeschichte]] und die Liste der [[Spezial:Recentchanges|letzten Änderungen]] nicht mit unzähligen Kleinständerungen überflutet und die Versionsgeschichte der Seite bleibt übersichtlich. Wir sehen sonst jeden geänderten Buchstaben im Änderungslogbuch, was den Autoren und den Admins die Suche nach Auffälligkeiten erschwert.
Viele Grüße. {{#if: [[Benutzer:Juetho|Jürgen]] 18:05, 2. Okt. 2011 (CEST)|[[Benutzer:Juetho|Jürgen]] 18:05, 2. Okt. 2011 (CEST)|Digitale bildgebende Verfahren: Aufnahme}}
Bei größeren Ergänzungen ist die Bearbeitung eines einzelnen Abschnitts sinnvoll; aber auch dann sollte er vor dem Speichern kontrolliert werden, damit nicht ständig Korrekturen der Rechtschreibung u.a. notwendig sind. -- Danke! [[Benutzer:Juetho|Jürgen]]
== [[Berechnung einer akustischen Transmissionline]] ==
Ist das wirklich ein eigenständiges Buch? Du solltest wenigstens eine Projektbeschreibung einfügen, damit das geklärt wird. Oder sollte es in ein anderes Buch zur Akustik eingebunden werden?
''Wenn wir so etwas wie Fachzeitschriften hätten, wäre das vermutlich kein Problem, dort einen solchen Artikel zu veröffentlichen. Aber solange es keine aktive Gemeinschaft bei de-WB gibt, hat es vermutlich keinen Sinn, eine Rubrik für Fachzeitschriften vorzuschlagen.''
So würde ich mich erst einmal über eine Klarstellung freuen. -- Danke! [[Benutzer:Juetho|Jürgen]] 14:19, 13. Sep. 2013 (CEST)
:Ich kann und will das nicht beurteilen, allerdings beschreibt es das Thema in einer vollständigen Weise, auch wenn es nur ein kleines Thema ist. Im Übrigen hatte ich mich an dem folgenden Buch im Technik-Regal orientiert: [[Kettenschaltung einstellen (Fahrrad)]] - wenn das ein Buch ist, dann auch [[Berechnung einer akustischen Transmissionline]]. Nichtsdestoweniger könnte dieser Beitrag gerne als eigenständiges Kapitel in ein Buch über Lautsprecher oder Akustik eingefügt werden. Eine Projektbeschreibung habe ich vorangestellt. --[[Benutzer:Bautsch|Bautsch]] 14:40, 13. Sep. 2013 (CEST)
:: Sehr interessant geschrieben. Selbst wenn man alle Formeln ignoriert, kann man etwas daraus lernen. -- [[Benutzer:Klaus Eifert|Klaus]] 21:13, 29. Mär. 2014 (CET)
Ich weiss leider nicht, welches Lautsprecherprinzip Herr Bautsch hier so ausführlich und aufwendig beschreibt, doch mit der von Bailey beschriebenen Konstruktion haben seine Ausführungen nichts gemein. Ich bin etwas überrascht, dass der Verfasser dieses "Buches" als Physiker(!) hier Quellen zitiert, die er in seinen Ausführungen völlig ignoriert, und statt dessen Labyrinth-LS oder sonst etwas beschreibt, das mit dem Thema praktisch nichts zu tun hat.
Für das Verständnis der TLM ist dieses "Buch" völlig unbrauchbar und für die Konstruktion eines TLM-Lautsprechers eher kontraproduktiv.
Das ist nicht meine persönliche Meinung, und ich will nicht behaupten, dass ich schlauer bin als Bautsch, sondern nur dass die angegebenen Quellen etwas ganz anders beschreiben. Statt die vorliegenden umfangreichen Ausführungen zu verfassen, wäre es verdienstvoller gewesen, die Original-Artikel zu übersetzen und ggfls. zu redigieren.
Der vorliegende Artikel ("Buch") ist - mit Verlaub - "Etikettenschwindel" (keine Beleidigung beabsichtigt!).
--[[Benutzer:Connectcorrect|Connectcorrect]] 16:04, 7. Aug. 2018 (CEST)Connectcorrect
:Meines Wissens habe ich nirgends behauptet, dass das Lautsprecherlabyrinth auf den Veröffentlichungen von Bailey beruht. Die Funktion und die Prinzipien der Transmissionline sind aber von Bailey zuerst veröffentlicht und beschrieben worden, und ich wüsste auch nicht, was daraus diesem Wikibook widerspräche. Wie auch immer, die ersten Abschnitte sollen aus rein didaktischen Gründen zur besseren Nachvollziehbarkeit der Herleitung der akustischen Formel für die Transmissionline dienen. Diese Formel habe ich unter Verwendung der Veröffentlichung ''Schallabsorption'' von Mechel Mitte der 1980 Jahre selber entwickelt, um meine eigenen Transmissionline-Lautprecherboxen konzipieren, entwickeln, konstruieren, bauen und optimieren zu können - und es hat bestens funktioniert. Daher gibt es dafür jedenfalls keine explizite Quelle. --[[Benutzer:Bautsch|Bautsch]] 17:04, 7. Aug. 2018 (CEST)
::Habe übrigens gerade in der 1965er Originalveröffentlichung die Abbildung 3 gesehen, in der Bailey das Schallabyrinth dargestellt hat. Ansonsten habe ich in beiden Bailey-Artikeln "Bradford" als Hochschulort gefunden. Die Dispersion der Dämpfung muss selbstverständlich berücksichtigt werden, was mit den angegebenen komplexwertigen Funktionen besonders einfach dargestellt werden kann. Die Amplitude der nach hinten abgestrahlten Schallwelle geht nicht auf Null zurück und muss bei der Betrachtung des Gesamtsystems von Lautsprecher und Transmissionline berücksichtigt werden, so wie auch Bailey es getan hat. --[[Benutzer:Bautsch|Bautsch]] 13:38, 9. Aug. 2018 (CEST)
== [[Strukturierte Programmierung]] ==
Habe gerade eine Projektdefinition hinzugefügt. Falls du an dem Buch schreibst, könntest du sie vielleicht ausfüllen. -- [[Benutzer:Qwertz84|Qwertz84]] 11:17, 24. Okt. 2014 (CEST)
== PDF Version ==
Hallo ich habe soeben eine LaTeX PDF Version deines Buch über digitale bildgebene Verfahren erstellt und auf der Hauptseite des Buchs verlinkt.
Mit physikalischen Grüßen
[[Benutzer:Dirk Hünniger|Dirk Hünniger]] 19:40, 27. Sep. 2015 (CEST)
== Wikibooks bietet mehr als ein einzelnes Buch ==
Hallo Bautsch,
seit langem bist du bei [[Datei:Wikibooks logo.svg|24px|alt=Wikibooks]] aktiv und
schreibst an deinen eigenen Büchern. Dafür danken wir dir vielmals.
Nach deinen umfangreichen Erfahrungen möchte ich
dich ansprechen, ob du mit deinen Kenntnissen und Erfahrungen nicht auch anderen Autoren
helfen und Wikibooks insgesamt weiterbringen könntest. Auf dem [[Wikibooks:Portal|Portal]] oder dem
[[Wikibooks:Schwarzes Brett|Schwarzen Brett]] stehen ein paar Anregungen; interessant sind
vor allem folgende Seiten zur Zusammenarbeit:
* [[Wikibooks:Verbesserungsvorschläge|Verbesserungsvorschläge]] oder Antworten bei [[Wikibooks:Ich brauche Hilfe|Ich brauche Hilfe]]
* [[Wikibooks:Kandidaten für den Buchkatalog|Kandidaten für den Buchkatalog]] sowie [[Wikibooks:Löschkandidaten|Löschkandidaten]]
Einen Überblick zu weiteren Möglichkeiten der Mitarbeit findest in der [[Hilfe:Administratoren/ Hilf mit!|Wikibooks-Hilfe]]. Wir würden uns sehr über deine Beteiligung freuen.
Recht herzlichen Dank und weiterhin viel Erfolg auf unseren Seiten! -- [[Benutzer:Juetho|Jürgen]] 15:28, 12. Dez. 2015 (CET)
== PDF Version ==
Hallo Bautsch,
wie von dir gewünscht habe ich die PDF Version deines Buches über digitale bildgebende Verfahren aktualisiert.
Viele Grüße [[Benutzer:Dirk Hünniger|Dirk Hünniger]] 14:12, 4. Feb. 2017 (CET)
== Export nach Pdf, LaTeX, Epub, Odt ==
Hallo Bautsch,
ich möchte gerne das die Funktion mit der ich das PDF von deinem Buch über Bildgebende Verfahren erzeugt habe auf Wikibooks algemein verfügbar wird. Dazu soll es als Link im linken Seitenmenü unter Werkzeuge mit dem Title Multi Format Export eingefügt werden. Der Link soll auf https://mediawiki2latex.wmflabs.org/ verweisen. Ich freue mich auf einen kurzen Kommentar von dir unter [[Wikibooks:Verbesserungsvorschläge]] unter der Überschrift ''Dateiexport im linken Seitenmenü''.
Viele Grüße [[Benutzer:Dirk Hünniger|Dirk Hünniger]] 22:20, 5. Dez. 2019 (CET)
== Buch oder Kapitel ==
Hallo, du bist schon so lange dabei. Dann achte doch bitte auf das, was bei WB üblich und sinnvoll ist. Wenn die Einzelthemen zu den „Quadrivialen Kuriositäten“ gehören und als Kapitel bezeichnet werden, dann lege sie auch so an, nämlich als Unterseite des Buches. Falls du es vergessen hast, siehe hier: [[Hilfe:Buch in Kapitel untergliedern]] Für die „Reparatur“ deiner unpassenden Anfänge siehe [[Hilfe:Seite verschieben]]. -- Danke! [[Benutzer Diskussion:Juetho|Jürgen]] 18:38, 14. Mär. 2021 (CET)
:Da ich "schon so lange dabei" bin, weiß ich zwar, was der Unterschied zwischen einem Wikibook und einem Wikibook-Kapitel ist, aber hier gibt es ein paar Herausforderungen, mit denen ich konfrontiert bin. Die Verlinkung innerhalb von Wikibooks landet stets auf einer Webseite, bei der oben in der Bearbeitungsleiste "Kapitel" steht, auch wenn es sich um die Startseite eines Wikibooks handelt. In der Tabelle befinden sich sowohl etablierte Wikibooks, als auch als Unterkapitel angelegte Exkurse eines Wikibooks. Ferner gibt es seit heute zwei neue Beiträge (respektive "Kapitel"), die aus meiner Sicht sowohl als eigenständiges Wikibook funktionieren, als auch als ein Unterkapitel von „Quadriviale Kuriositäten“ angelegt werden könnten. Gibt es da harte Kriterien, nach denen das eingeordnet werden könnte ? Oder ist der Beitrag „Quadriviale Kuriositäten“ vielleicht eher als "Bücherregal" geeignet ? Dazu kenne ich mich aber ehrlichgesagt dann doch nicht gut genug aus... --[[Benutzer:Bautsch|Bautsch]] 22:11, 14. Mär. 2021 (CET)
{{--|Ich wollte Dich auch schon drauf ansprechen. Stimme Jürgen aber bei "Reparatur" und "unpassend" nicht zu. Die Idee der Quadrivialen ist mir klar und ich sehe die Problematik. Ich würd ja sagen, mach einfach erstmal in Ruhe. "Harte Kriterien" gibt es meines Wissens nach nicht. Nur die von Jürgen verlinkten Hilfeseiten. Wie siehst Du denn zum Beispiel die Kürze von [[Till Eulenspiegels lustige Serie]]? Du hast in die Projektdefinition geschrieben, dass das zu 90% fertig ist. Es gab vor einiger Zeit mal Gespräche über Artikel, Hefte und Broschüren. Vielleicht ist das eine Gelegenheit für dieserlei Situation eine Lösung zu finden? Viele Grüße --[[Benutzer:HirnSpuk|HirnSpuk]] 03:38, 15. Mär. 2021 (CET)}}
Oops, das ist natürlich ein Versehen: [[Bautsch/ Das Apfelmännchen/ FraktaleMenge]] wäre ein Kapitel eines Buchs "Bautsch". Bitte verschiebe es angemessen und korrigiere (soweit nötig) die Links.
Das ist natürlich ein anderes Thema als die obigen Absätze. Aber die Überschrift passt so gut, also setze ich es dazu. -- [[Benutzer Diskussion:Juetho|Jürgen]] 19:06, 10. Apr. 2021 (CEST)
:Nein, das wird bis in wenigen Augenblicken nur die Baustelle gewesen sein. Ich werde es gleich in den Wikibook-Namensraum verschieben. --[[Benutzer:Bautsch|Bautsch]] 19:09, 10. Apr. 2021 (CEST)
== [[Quadriviale Kuriositäten]] ==
Hallo Bautsch,
im angegebenen Buch habe ich ein bisschen gewirbelt, da ich die Exzellenz-Vorlage setzen wollte. Dann sind die Pferde mit mir durchgegangen und ich habe möglicherweise mehr gemacht, als genehm ist. Bitte schau Dir doch mal an, was ich gemacht habe und setze es zurück, wenn es nicht gefällt, dann beschränke ich mich rein auf die Typografie. Wenn es gefällt gehe ich den Rest der Seite dann entsprechend auch noch durch.
Viele Grüße --[[Benutzer:HirnSpuk|HirnSpuk]] 19:06, 4. Mai 2021 (CEST)
:Alles (sehr) gut, bitte weitermachen, auch wenn das deutsche Wort "numerieren" von lateinisch "numerus" abstammt ;-) ... --[[Benutzer:Bautsch|Bautsch]] 21:30, 4. Mai 2021 (CEST)
{{--|Da bin ich ja froh, gut. Bei der Nummer hab ich mich an die aktuelle deutsche Rechtschreibung gehalten. Aber meinetwegen korrigier das zurück. Ich steh auf dem Standpunkt Sprache entwickelt sich flexibel. Ich versteh bis heute nicht, warum sich gesamt nur mit einem M schreiben soll {{smiley}}. Und das "Du" schreibe ich in renitenter Konsequenz groß (zumindest, wenn mir kein "Fehler" unterläuft). Ich finde es gnadenlos unhöflich Anreden nicht groß zu schreiben, auch wenn sie unbestimmt sind. Ich hab mich inzwischen davon überzeugen lassen, dass das in Büchern besser ist, konsequente Regeln zu benutzen, habe aber kein Problem damit, wenn das jemand anders handhaben möchte. Gruß --[[Benutzer:HirnSpuk|HirnSpuk]] 11:08, 5. Mai 2021 (CEST)}}
::Solange Inhalt und Sinn nicht entstellt werden, kann ich damit leben, ohne mich zu ärgern. Das war nur eine kleine, spaßig gemeinte etymologische Spitze... :-) --[[Benutzer:Bautsch|Bautsch]] 11:55, 5. Mai 2021 (CEST)
== Umfrage-Feedback ==
Moin, ich bin dabei eine Umfrage vorzubereiten, um mal abzufragen, wohin die Reise bei Wikibooks gehen könnte. Im Moment macht ja jeder so eher sein eigenes Ding. Ich hätte bevor ich die Umfrage Live schalte gern ein wenig Feedback. Wenn Du Dich dazu in der Lage siehst, freu ich mich, wenn Du Dich mit diesem Eintrag beschäftigst: [[Wikibooks:Ich brauche Hilfe#Ich hätte gerne Feedback zu einer geplanten Umfrage]]. Wenn Du Zeit und Lust findest, herzlichen Dank. Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 00:08, 3. Jun. 2021 (CEST)
:Hallo Bautsch, die Umfrage ist gestartet. Ich würde mich über Teilnahme freuen, damit zukünftige Arbeiten nicht am Bedarf der Gemeinschaft vorbei gehen oder größere Unstimmigkeiten erzeugen: [[Wikibooks:Projektentwicklung/2021/Umfrage Grundsätzliche Meinungen]]. --Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 13:20, 24. Jul. 2021 (CEST)
Hallo Bautsch, ich bereite die Umfrageantworten gerade für die Auswertung vor. Dabei ist mir bei einer Deiner Antworten ein Problem unter gekommen: [[Spezial:Diff/970995/970996]]. Schaust Du da bitte mal drauf, ob ichs richtig interpretiert habe? Danke und Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 13:12, 3. Sep. 2021 (CEST)
:Danke, alles gut ! --[[Benutzer:Bautsch|Bautsch]] 21:57, 3. Sep. 2021 (CEST)
== PDF von abzählbare Physik ==
Hallo Markus,
ich habe mal eine PDF Version deines Wikibooks über die abzählbare Physik erstellt und auf der Hauptseite des Buches verlinkt. Leider ist sie nicht ganz perfekt, aber dennoch denke ich bereits lesbar. Ich habe sie mit LaTeX gemacht und den LaTeX Quellcode den PDF Dokument als Anhang beigefügt, so dass jeder in der Lage sein sollte noch persönliche Anpassungen vorzunehmen. Ein gleichlautende Nachricht habe ich an Benutzer RudolfGermer verschicken. Falls euch das mit dem PDF nicht passen sollte könnte ihr es natürlich auch wieder raus nehmen.
Viele Grüße und Vielen Dank für die viele Arbeit die du in das Buch gesteckt hast!
[[Benutzer:Dirk Hünniger|Dirk Hünniger]] 12:29, 12. Nov. 2021 (CET)
:Das Buch ist schon von Rudolf Germer, ich hatte im nur in Sachen Wiki-Management unter die Arme gegriffen. Insofern ist es aber schön, dass er informiert wurde. Von meiner Seite aus jedenfalls vielen Dank für die Initiative und Unterstützung ! --[[Benutzer:Bautsch|Bautsch]] 12:45, 12. Nov. 2021 (CET)
== Kapitelumzug ==
Schön, dass deine textliche Arbeit vom ehemaligen "Die Himmelstafel von Tal-Qadi/ Zahlen" im Buch [[Quadriviale Kuriositäten/ Zahlen|Quadriviale Kuriositäten/ Zahlen]] einen würdigen Platz gefunden haben. Ich hatte den Löschantrag der alten Seiten schon wage zur Kenntnis genommen, wollte aber warten, bis die Texte wo anders auftauchen. Ich würde da noch ein wenig ab der Einleitung basteln. Eben dass bei früheren Gelehrten immer auch ein Symbolismus mit dazu gehörte (Astronomie und Astrologie waren damals nicht so strickt getrennt wie heute... ). Und beim Lehrgespräch würde ich Platon anführen, der Sokrates Lehrgespräche führen lässt. Wieviel davon Sokrates einfach in den Mund gelegt wurde, sei mal dahingestellt. Sofis Welt wäre eine moderne Form der fiktiven Lehrgespräche... So in etwa. Gruß --[[Benutzer:Mjchael|mjchael]] 02:43, 5. Jan. 2022 (CET)
:Vielen Dank für die Mitteilung ! Ich finde die Vorschläge nicht nur nachvollziehbar, sondern sogar gut, und würde mich durchaus über eine entsprechende Unterstützung und Mitwirkung freuen ! --[[Benutzer:Bautsch|Bautsch]] 10:07, 5. Jan. 2022 (CET)
::Ich habe mal in [[Quadriviale Kuriositäten/ Zahlen]] eine Einleitung geschrieben und bei [[Quadriviale Kuriositäten/ Zahlen/ Anteus]] die Einleitung kräftig überarbeitet, mit der Zielsetzung, dass sich deine Seiten besser in das Buchprojekt einfügen. Ich hoffe, mir ist es gelungen, die Anpassungen sowohl in deinem Sinne, als auch im Sinne des Buches zu gestalten. Doch betrachte sie nur als einen Entwurf von mir, als Vorschlag, den du gerne revidieren oder weiterbearbeiten kannst.
::Ich werde mich allerdings nicht tiefer mit der Thematik befassen. Ich möchte kein Co-Autor werden. Dazu habe ich mit meinen eigenen Buchprojekten [[Gitarre]] und [[Liederbuch]] mehr als genug zu tun. Es war nur eine "Umzugshilfe". Vereinzelt kann ich dir auf Anfrage aber hier und da mal einen Tipp geben. --[[Benutzer:Mjchael|mjchael]] 09:43, 6. Jan. 2022 (CET)
:::Herzlichen Dank ! Ich habe nur ein paar geringfügige formale Anpassungen vorgenommen, weil mit inhaltlich alles sehr gut gefallen hat. Auf eine weiterhin gute Zusammenarbeit... --[[Benutzer:Bautsch|Bautsch]] 11:24, 6. Jan. 2022 (CET)
== Neues PDF von Bildgebende Verfahren ==
Hallo,
ich mache bald mal ein neues PDF von Bildgebende Verfahren weil das alte wie du richtig bemerkt hast schon mehr als 10 Jahre alt ist. Heute Abend schaffe ich es nicht mehr. Morgen könnte es klappen. Sonst kannst du es gerne auch selbst versuchen. Siehe hierzu: https://mediawiki2latex.wmcloud.org/
Viele Grüße [[Benutzer:Dirk Hünniger|Dirk Hünniger]] 17:57, 1. Jul. 2026 (CEST)
s84enl2adhejv2k3srp8jvqlz7075y4
1088551
1088535
2026-07-02T09:39:42Z
Dirk Hünniger
48754
/* Neues PDF von Bildgebende Verfahren */ Antwort
1088551
wikitext
text/x-wiki
== Willkommen ==
<div>
{| {{DesignBewertung}}
| [[Datei:Wikibooks-logo-en-noslogan.svg|135px]]
|<div style="padding:1ex 1em;">Hallo Bautsch,
[[Hilfe:Willkommen|Willkommen]] bei Wikibooks. Diese Nachricht ist nicht automatisch erstellt, sondern es gibt in Wikibooks Benutzer, die sich Zeit für die neu Dazugekommenen nehmen, dich begrüßen, Fragen beantworten, einfach für dich da sind. Zunächst mal hoffe ich, dass du hier interessante Bücher zum Lesen findest. Die beste Unterstützung ist [[Hilfe:Willkommen#Kritisch_lesen|kritisches Lesen]], jeder kann es!
Du hast dich also entschieden, [[Hilfe:Warum inhaltsoffene Lehrbücher? | inhaltsoffene Lehrbücher]] zu erstellen bzw. Korrektur zu lesen? Viele nützliche Informationen für Autoren findest du im [[Hilfe:Wikibooks-Lehrbuch | Wikibooks-Lehrbuch]] und auf dem [[Hilfe:Merkzettel|Merkzettel zum Ausdrucken]]. Im Lehrbuch werden auch die vielen [[Hilfe:Menüpunkte|Menüpunkte]] erklärt, die du am oberen und linken Rand siehst. Auf dem [[Wikibooks:Portal|Portal für Autoren]] kannst du im Abschnitt [[Wikibooks:Portal/ Beteiligen|Beteiligen und Mitgestalten]] Anregungen finden. Es gibt auch eine Liste mit [[Wikibooks:Verwaiste Bücher|verwaisten Büchern]], die auf einen neuen Autor warten.
Wenn du eine Anleitung vermisst oder weitere Hilfe brauchst, '''zögere nicht''', deine Fragen auf [[Wikibooks:Ich brauche Hilfe]] zu stellen. Natürlich kannst du auch mir ([[Benutzer:Juetho|Jürgen]]) persönlich deine Fragen stellen.
Falls du Autor werden willst, solltest du besonders beachten:
:* [[Hilfe:Wikibooks-Lehrbuch/ Navigation Regeln|Grundsätzliches kurz und knapp]]
:* [[Hilfe:Wikibooks-Lehrbuch/ Navigation Statut|Was Wikibooks ist und was wir hier tun]]
:* [[Hilfe:Wikibooks-Lehrbuch/ Navigation Neues Buch|Wie man ein neues Buch beginnt]]
Die neuesten Nachrichten findest du in der [[Wikibooks:Rundschau|Rundschau.]] Mit anderen kommunizieren kannst du über den [[Wikibooks:Chat|Chat]] und über die [[mail:wikibooksde-l|Mailingliste]].
{{#if: Danke für deine Mitarbeit!|<p>Danke für deine Mitarbeit!</p> }}
Erfolg und viel Spaß wünscht [[Benutzer:Juetho|Jürgen]] 13:35, 31. August 2011</div>
|}
</div>
== [[Digitale bildgebende Verfahren]] ==
Ich würde mich freuen, wenn es sich dabei nicht nur um eine Stoffsammlung als "Schnellschuss" handelt, sondern die Themen mit Inhalt gefüllt werden. Ich bitte dich aber, den Buchanfang zu vervollständigen:
* Die '''[[Vorlage:Projektdefinition|Projektdefinition]]''' ist zu vervollständigen.
* In der '''Infoleiste''' ist ein Regal einzutragen, ebenso Angaben zur Zielgruppe und zum Typ des Buches. Erläuterungen dazu stehen bei der [[Vorlage:Infoleiste]].
* Die potenziellen Leser und (Mit-) Autoren sollen das Buch finden können. Dazu solltest du das Buch in einem passenden '''[[Wikibooks:Bücherregale|Regal]]''' eintragen, nämlich demselben, das in der Infoleiste aufgeführt wird.
Recht herzlichen Dank und guten Fortschritt! -- [[Benutzer:Juetho|Jürgen]]
: Du kommst ja gut in Schwung, prima! Aber im [[Regal:Physik]] steht dein Buch noch nicht. Bitte trage das noch ein. -- Danke! [[Benutzer:Juetho|Jürgen]] 18:05, 2. Okt. 2011 (CEST)
== Vorschaufunktion ==
[[Datei:Vorschau.png|thumb|200px|Vorschau-Button]]
Hallo {{PAGENAME}}, mir ist aufgefallen, dass du kurz hintereinander mehrere kleine Bearbeitungen an der {{#if: [[Benutzer:Juetho|Jürgen]] 18:05, 2. Okt. 2011 (CEST) | Seite [{{SERVER}}{{localurl:Digitale bildgebende Verfahren: Aufnahme|action=history}} Digitale bildgebende Verfahren: Aufnahme] | gleichen Seite}} vorgenommen hast. Wir freuen uns über jede Verbesserung, wer immer sie vornimmt, und möchten deinen Tatendrang keinesfalls bremsen. Wenn es dir '''keine große Mühe ist''', wäre es schön, wenn du in Zukunft die [[Hilfe:Menüpunkte#Anker:Vorschau| Vorschaufunktion]] benutzt. Du weißt vermutlich nicht, dass bei jeder, ''auch bei der kleinsten Änderung'' der gesamte Text der Seite erneut in der Datenbank gespeichert wird. Also gehe bitte sparsam mit spendenfinanziertem Speicherplatz um. Wenn du an einer Seite Bearbeitungen in mehreren Abschnitten planst, benutze bitte nicht nacheinander die einzelnen „Bearbeiten“-Buttons am rechten Rand, sondern das „Bearbeiten“ über der Seite. Dadurch werden die [[w:Hilfe:Versionen|Versionsgeschichte]] und die Liste der [[Spezial:Recentchanges|letzten Änderungen]] nicht mit unzähligen Kleinständerungen überflutet und die Versionsgeschichte der Seite bleibt übersichtlich. Wir sehen sonst jeden geänderten Buchstaben im Änderungslogbuch, was den Autoren und den Admins die Suche nach Auffälligkeiten erschwert.
Viele Grüße. {{#if: [[Benutzer:Juetho|Jürgen]] 18:05, 2. Okt. 2011 (CEST)|[[Benutzer:Juetho|Jürgen]] 18:05, 2. Okt. 2011 (CEST)|Digitale bildgebende Verfahren: Aufnahme}}
Bei größeren Ergänzungen ist die Bearbeitung eines einzelnen Abschnitts sinnvoll; aber auch dann sollte er vor dem Speichern kontrolliert werden, damit nicht ständig Korrekturen der Rechtschreibung u.a. notwendig sind. -- Danke! [[Benutzer:Juetho|Jürgen]]
== [[Berechnung einer akustischen Transmissionline]] ==
Ist das wirklich ein eigenständiges Buch? Du solltest wenigstens eine Projektbeschreibung einfügen, damit das geklärt wird. Oder sollte es in ein anderes Buch zur Akustik eingebunden werden?
''Wenn wir so etwas wie Fachzeitschriften hätten, wäre das vermutlich kein Problem, dort einen solchen Artikel zu veröffentlichen. Aber solange es keine aktive Gemeinschaft bei de-WB gibt, hat es vermutlich keinen Sinn, eine Rubrik für Fachzeitschriften vorzuschlagen.''
So würde ich mich erst einmal über eine Klarstellung freuen. -- Danke! [[Benutzer:Juetho|Jürgen]] 14:19, 13. Sep. 2013 (CEST)
:Ich kann und will das nicht beurteilen, allerdings beschreibt es das Thema in einer vollständigen Weise, auch wenn es nur ein kleines Thema ist. Im Übrigen hatte ich mich an dem folgenden Buch im Technik-Regal orientiert: [[Kettenschaltung einstellen (Fahrrad)]] - wenn das ein Buch ist, dann auch [[Berechnung einer akustischen Transmissionline]]. Nichtsdestoweniger könnte dieser Beitrag gerne als eigenständiges Kapitel in ein Buch über Lautsprecher oder Akustik eingefügt werden. Eine Projektbeschreibung habe ich vorangestellt. --[[Benutzer:Bautsch|Bautsch]] 14:40, 13. Sep. 2013 (CEST)
:: Sehr interessant geschrieben. Selbst wenn man alle Formeln ignoriert, kann man etwas daraus lernen. -- [[Benutzer:Klaus Eifert|Klaus]] 21:13, 29. Mär. 2014 (CET)
Ich weiss leider nicht, welches Lautsprecherprinzip Herr Bautsch hier so ausführlich und aufwendig beschreibt, doch mit der von Bailey beschriebenen Konstruktion haben seine Ausführungen nichts gemein. Ich bin etwas überrascht, dass der Verfasser dieses "Buches" als Physiker(!) hier Quellen zitiert, die er in seinen Ausführungen völlig ignoriert, und statt dessen Labyrinth-LS oder sonst etwas beschreibt, das mit dem Thema praktisch nichts zu tun hat.
Für das Verständnis der TLM ist dieses "Buch" völlig unbrauchbar und für die Konstruktion eines TLM-Lautsprechers eher kontraproduktiv.
Das ist nicht meine persönliche Meinung, und ich will nicht behaupten, dass ich schlauer bin als Bautsch, sondern nur dass die angegebenen Quellen etwas ganz anders beschreiben. Statt die vorliegenden umfangreichen Ausführungen zu verfassen, wäre es verdienstvoller gewesen, die Original-Artikel zu übersetzen und ggfls. zu redigieren.
Der vorliegende Artikel ("Buch") ist - mit Verlaub - "Etikettenschwindel" (keine Beleidigung beabsichtigt!).
--[[Benutzer:Connectcorrect|Connectcorrect]] 16:04, 7. Aug. 2018 (CEST)Connectcorrect
:Meines Wissens habe ich nirgends behauptet, dass das Lautsprecherlabyrinth auf den Veröffentlichungen von Bailey beruht. Die Funktion und die Prinzipien der Transmissionline sind aber von Bailey zuerst veröffentlicht und beschrieben worden, und ich wüsste auch nicht, was daraus diesem Wikibook widerspräche. Wie auch immer, die ersten Abschnitte sollen aus rein didaktischen Gründen zur besseren Nachvollziehbarkeit der Herleitung der akustischen Formel für die Transmissionline dienen. Diese Formel habe ich unter Verwendung der Veröffentlichung ''Schallabsorption'' von Mechel Mitte der 1980 Jahre selber entwickelt, um meine eigenen Transmissionline-Lautprecherboxen konzipieren, entwickeln, konstruieren, bauen und optimieren zu können - und es hat bestens funktioniert. Daher gibt es dafür jedenfalls keine explizite Quelle. --[[Benutzer:Bautsch|Bautsch]] 17:04, 7. Aug. 2018 (CEST)
::Habe übrigens gerade in der 1965er Originalveröffentlichung die Abbildung 3 gesehen, in der Bailey das Schallabyrinth dargestellt hat. Ansonsten habe ich in beiden Bailey-Artikeln "Bradford" als Hochschulort gefunden. Die Dispersion der Dämpfung muss selbstverständlich berücksichtigt werden, was mit den angegebenen komplexwertigen Funktionen besonders einfach dargestellt werden kann. Die Amplitude der nach hinten abgestrahlten Schallwelle geht nicht auf Null zurück und muss bei der Betrachtung des Gesamtsystems von Lautsprecher und Transmissionline berücksichtigt werden, so wie auch Bailey es getan hat. --[[Benutzer:Bautsch|Bautsch]] 13:38, 9. Aug. 2018 (CEST)
== [[Strukturierte Programmierung]] ==
Habe gerade eine Projektdefinition hinzugefügt. Falls du an dem Buch schreibst, könntest du sie vielleicht ausfüllen. -- [[Benutzer:Qwertz84|Qwertz84]] 11:17, 24. Okt. 2014 (CEST)
== PDF Version ==
Hallo ich habe soeben eine LaTeX PDF Version deines Buch über digitale bildgebene Verfahren erstellt und auf der Hauptseite des Buchs verlinkt.
Mit physikalischen Grüßen
[[Benutzer:Dirk Hünniger|Dirk Hünniger]] 19:40, 27. Sep. 2015 (CEST)
== Wikibooks bietet mehr als ein einzelnes Buch ==
Hallo Bautsch,
seit langem bist du bei [[Datei:Wikibooks logo.svg|24px|alt=Wikibooks]] aktiv und
schreibst an deinen eigenen Büchern. Dafür danken wir dir vielmals.
Nach deinen umfangreichen Erfahrungen möchte ich
dich ansprechen, ob du mit deinen Kenntnissen und Erfahrungen nicht auch anderen Autoren
helfen und Wikibooks insgesamt weiterbringen könntest. Auf dem [[Wikibooks:Portal|Portal]] oder dem
[[Wikibooks:Schwarzes Brett|Schwarzen Brett]] stehen ein paar Anregungen; interessant sind
vor allem folgende Seiten zur Zusammenarbeit:
* [[Wikibooks:Verbesserungsvorschläge|Verbesserungsvorschläge]] oder Antworten bei [[Wikibooks:Ich brauche Hilfe|Ich brauche Hilfe]]
* [[Wikibooks:Kandidaten für den Buchkatalog|Kandidaten für den Buchkatalog]] sowie [[Wikibooks:Löschkandidaten|Löschkandidaten]]
Einen Überblick zu weiteren Möglichkeiten der Mitarbeit findest in der [[Hilfe:Administratoren/ Hilf mit!|Wikibooks-Hilfe]]. Wir würden uns sehr über deine Beteiligung freuen.
Recht herzlichen Dank und weiterhin viel Erfolg auf unseren Seiten! -- [[Benutzer:Juetho|Jürgen]] 15:28, 12. Dez. 2015 (CET)
== PDF Version ==
Hallo Bautsch,
wie von dir gewünscht habe ich die PDF Version deines Buches über digitale bildgebende Verfahren aktualisiert.
Viele Grüße [[Benutzer:Dirk Hünniger|Dirk Hünniger]] 14:12, 4. Feb. 2017 (CET)
== Export nach Pdf, LaTeX, Epub, Odt ==
Hallo Bautsch,
ich möchte gerne das die Funktion mit der ich das PDF von deinem Buch über Bildgebende Verfahren erzeugt habe auf Wikibooks algemein verfügbar wird. Dazu soll es als Link im linken Seitenmenü unter Werkzeuge mit dem Title Multi Format Export eingefügt werden. Der Link soll auf https://mediawiki2latex.wmflabs.org/ verweisen. Ich freue mich auf einen kurzen Kommentar von dir unter [[Wikibooks:Verbesserungsvorschläge]] unter der Überschrift ''Dateiexport im linken Seitenmenü''.
Viele Grüße [[Benutzer:Dirk Hünniger|Dirk Hünniger]] 22:20, 5. Dez. 2019 (CET)
== Buch oder Kapitel ==
Hallo, du bist schon so lange dabei. Dann achte doch bitte auf das, was bei WB üblich und sinnvoll ist. Wenn die Einzelthemen zu den „Quadrivialen Kuriositäten“ gehören und als Kapitel bezeichnet werden, dann lege sie auch so an, nämlich als Unterseite des Buches. Falls du es vergessen hast, siehe hier: [[Hilfe:Buch in Kapitel untergliedern]] Für die „Reparatur“ deiner unpassenden Anfänge siehe [[Hilfe:Seite verschieben]]. -- Danke! [[Benutzer Diskussion:Juetho|Jürgen]] 18:38, 14. Mär. 2021 (CET)
:Da ich "schon so lange dabei" bin, weiß ich zwar, was der Unterschied zwischen einem Wikibook und einem Wikibook-Kapitel ist, aber hier gibt es ein paar Herausforderungen, mit denen ich konfrontiert bin. Die Verlinkung innerhalb von Wikibooks landet stets auf einer Webseite, bei der oben in der Bearbeitungsleiste "Kapitel" steht, auch wenn es sich um die Startseite eines Wikibooks handelt. In der Tabelle befinden sich sowohl etablierte Wikibooks, als auch als Unterkapitel angelegte Exkurse eines Wikibooks. Ferner gibt es seit heute zwei neue Beiträge (respektive "Kapitel"), die aus meiner Sicht sowohl als eigenständiges Wikibook funktionieren, als auch als ein Unterkapitel von „Quadriviale Kuriositäten“ angelegt werden könnten. Gibt es da harte Kriterien, nach denen das eingeordnet werden könnte ? Oder ist der Beitrag „Quadriviale Kuriositäten“ vielleicht eher als "Bücherregal" geeignet ? Dazu kenne ich mich aber ehrlichgesagt dann doch nicht gut genug aus... --[[Benutzer:Bautsch|Bautsch]] 22:11, 14. Mär. 2021 (CET)
{{--|Ich wollte Dich auch schon drauf ansprechen. Stimme Jürgen aber bei "Reparatur" und "unpassend" nicht zu. Die Idee der Quadrivialen ist mir klar und ich sehe die Problematik. Ich würd ja sagen, mach einfach erstmal in Ruhe. "Harte Kriterien" gibt es meines Wissens nach nicht. Nur die von Jürgen verlinkten Hilfeseiten. Wie siehst Du denn zum Beispiel die Kürze von [[Till Eulenspiegels lustige Serie]]? Du hast in die Projektdefinition geschrieben, dass das zu 90% fertig ist. Es gab vor einiger Zeit mal Gespräche über Artikel, Hefte und Broschüren. Vielleicht ist das eine Gelegenheit für dieserlei Situation eine Lösung zu finden? Viele Grüße --[[Benutzer:HirnSpuk|HirnSpuk]] 03:38, 15. Mär. 2021 (CET)}}
Oops, das ist natürlich ein Versehen: [[Bautsch/ Das Apfelmännchen/ FraktaleMenge]] wäre ein Kapitel eines Buchs "Bautsch". Bitte verschiebe es angemessen und korrigiere (soweit nötig) die Links.
Das ist natürlich ein anderes Thema als die obigen Absätze. Aber die Überschrift passt so gut, also setze ich es dazu. -- [[Benutzer Diskussion:Juetho|Jürgen]] 19:06, 10. Apr. 2021 (CEST)
:Nein, das wird bis in wenigen Augenblicken nur die Baustelle gewesen sein. Ich werde es gleich in den Wikibook-Namensraum verschieben. --[[Benutzer:Bautsch|Bautsch]] 19:09, 10. Apr. 2021 (CEST)
== [[Quadriviale Kuriositäten]] ==
Hallo Bautsch,
im angegebenen Buch habe ich ein bisschen gewirbelt, da ich die Exzellenz-Vorlage setzen wollte. Dann sind die Pferde mit mir durchgegangen und ich habe möglicherweise mehr gemacht, als genehm ist. Bitte schau Dir doch mal an, was ich gemacht habe und setze es zurück, wenn es nicht gefällt, dann beschränke ich mich rein auf die Typografie. Wenn es gefällt gehe ich den Rest der Seite dann entsprechend auch noch durch.
Viele Grüße --[[Benutzer:HirnSpuk|HirnSpuk]] 19:06, 4. Mai 2021 (CEST)
:Alles (sehr) gut, bitte weitermachen, auch wenn das deutsche Wort "numerieren" von lateinisch "numerus" abstammt ;-) ... --[[Benutzer:Bautsch|Bautsch]] 21:30, 4. Mai 2021 (CEST)
{{--|Da bin ich ja froh, gut. Bei der Nummer hab ich mich an die aktuelle deutsche Rechtschreibung gehalten. Aber meinetwegen korrigier das zurück. Ich steh auf dem Standpunkt Sprache entwickelt sich flexibel. Ich versteh bis heute nicht, warum sich gesamt nur mit einem M schreiben soll {{smiley}}. Und das "Du" schreibe ich in renitenter Konsequenz groß (zumindest, wenn mir kein "Fehler" unterläuft). Ich finde es gnadenlos unhöflich Anreden nicht groß zu schreiben, auch wenn sie unbestimmt sind. Ich hab mich inzwischen davon überzeugen lassen, dass das in Büchern besser ist, konsequente Regeln zu benutzen, habe aber kein Problem damit, wenn das jemand anders handhaben möchte. Gruß --[[Benutzer:HirnSpuk|HirnSpuk]] 11:08, 5. Mai 2021 (CEST)}}
::Solange Inhalt und Sinn nicht entstellt werden, kann ich damit leben, ohne mich zu ärgern. Das war nur eine kleine, spaßig gemeinte etymologische Spitze... :-) --[[Benutzer:Bautsch|Bautsch]] 11:55, 5. Mai 2021 (CEST)
== Umfrage-Feedback ==
Moin, ich bin dabei eine Umfrage vorzubereiten, um mal abzufragen, wohin die Reise bei Wikibooks gehen könnte. Im Moment macht ja jeder so eher sein eigenes Ding. Ich hätte bevor ich die Umfrage Live schalte gern ein wenig Feedback. Wenn Du Dich dazu in der Lage siehst, freu ich mich, wenn Du Dich mit diesem Eintrag beschäftigst: [[Wikibooks:Ich brauche Hilfe#Ich hätte gerne Feedback zu einer geplanten Umfrage]]. Wenn Du Zeit und Lust findest, herzlichen Dank. Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 00:08, 3. Jun. 2021 (CEST)
:Hallo Bautsch, die Umfrage ist gestartet. Ich würde mich über Teilnahme freuen, damit zukünftige Arbeiten nicht am Bedarf der Gemeinschaft vorbei gehen oder größere Unstimmigkeiten erzeugen: [[Wikibooks:Projektentwicklung/2021/Umfrage Grundsätzliche Meinungen]]. --Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 13:20, 24. Jul. 2021 (CEST)
Hallo Bautsch, ich bereite die Umfrageantworten gerade für die Auswertung vor. Dabei ist mir bei einer Deiner Antworten ein Problem unter gekommen: [[Spezial:Diff/970995/970996]]. Schaust Du da bitte mal drauf, ob ichs richtig interpretiert habe? Danke und Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 13:12, 3. Sep. 2021 (CEST)
:Danke, alles gut ! --[[Benutzer:Bautsch|Bautsch]] 21:57, 3. Sep. 2021 (CEST)
== PDF von abzählbare Physik ==
Hallo Markus,
ich habe mal eine PDF Version deines Wikibooks über die abzählbare Physik erstellt und auf der Hauptseite des Buches verlinkt. Leider ist sie nicht ganz perfekt, aber dennoch denke ich bereits lesbar. Ich habe sie mit LaTeX gemacht und den LaTeX Quellcode den PDF Dokument als Anhang beigefügt, so dass jeder in der Lage sein sollte noch persönliche Anpassungen vorzunehmen. Ein gleichlautende Nachricht habe ich an Benutzer RudolfGermer verschicken. Falls euch das mit dem PDF nicht passen sollte könnte ihr es natürlich auch wieder raus nehmen.
Viele Grüße und Vielen Dank für die viele Arbeit die du in das Buch gesteckt hast!
[[Benutzer:Dirk Hünniger|Dirk Hünniger]] 12:29, 12. Nov. 2021 (CET)
:Das Buch ist schon von Rudolf Germer, ich hatte im nur in Sachen Wiki-Management unter die Arme gegriffen. Insofern ist es aber schön, dass er informiert wurde. Von meiner Seite aus jedenfalls vielen Dank für die Initiative und Unterstützung ! --[[Benutzer:Bautsch|Bautsch]] 12:45, 12. Nov. 2021 (CET)
== Kapitelumzug ==
Schön, dass deine textliche Arbeit vom ehemaligen "Die Himmelstafel von Tal-Qadi/ Zahlen" im Buch [[Quadriviale Kuriositäten/ Zahlen|Quadriviale Kuriositäten/ Zahlen]] einen würdigen Platz gefunden haben. Ich hatte den Löschantrag der alten Seiten schon wage zur Kenntnis genommen, wollte aber warten, bis die Texte wo anders auftauchen. Ich würde da noch ein wenig ab der Einleitung basteln. Eben dass bei früheren Gelehrten immer auch ein Symbolismus mit dazu gehörte (Astronomie und Astrologie waren damals nicht so strickt getrennt wie heute... ). Und beim Lehrgespräch würde ich Platon anführen, der Sokrates Lehrgespräche führen lässt. Wieviel davon Sokrates einfach in den Mund gelegt wurde, sei mal dahingestellt. Sofis Welt wäre eine moderne Form der fiktiven Lehrgespräche... So in etwa. Gruß --[[Benutzer:Mjchael|mjchael]] 02:43, 5. Jan. 2022 (CET)
:Vielen Dank für die Mitteilung ! Ich finde die Vorschläge nicht nur nachvollziehbar, sondern sogar gut, und würde mich durchaus über eine entsprechende Unterstützung und Mitwirkung freuen ! --[[Benutzer:Bautsch|Bautsch]] 10:07, 5. Jan. 2022 (CET)
::Ich habe mal in [[Quadriviale Kuriositäten/ Zahlen]] eine Einleitung geschrieben und bei [[Quadriviale Kuriositäten/ Zahlen/ Anteus]] die Einleitung kräftig überarbeitet, mit der Zielsetzung, dass sich deine Seiten besser in das Buchprojekt einfügen. Ich hoffe, mir ist es gelungen, die Anpassungen sowohl in deinem Sinne, als auch im Sinne des Buches zu gestalten. Doch betrachte sie nur als einen Entwurf von mir, als Vorschlag, den du gerne revidieren oder weiterbearbeiten kannst.
::Ich werde mich allerdings nicht tiefer mit der Thematik befassen. Ich möchte kein Co-Autor werden. Dazu habe ich mit meinen eigenen Buchprojekten [[Gitarre]] und [[Liederbuch]] mehr als genug zu tun. Es war nur eine "Umzugshilfe". Vereinzelt kann ich dir auf Anfrage aber hier und da mal einen Tipp geben. --[[Benutzer:Mjchael|mjchael]] 09:43, 6. Jan. 2022 (CET)
:::Herzlichen Dank ! Ich habe nur ein paar geringfügige formale Anpassungen vorgenommen, weil mit inhaltlich alles sehr gut gefallen hat. Auf eine weiterhin gute Zusammenarbeit... --[[Benutzer:Bautsch|Bautsch]] 11:24, 6. Jan. 2022 (CET)
== Neues PDF von Bildgebende Verfahren ==
Hallo,
ich mache bald mal ein neues PDF von Bildgebende Verfahren weil das alte wie du richtig bemerkt hast schon mehr als 10 Jahre alt ist. Heute Abend schaffe ich es nicht mehr. Morgen könnte es klappen. Sonst kannst du es gerne auch selbst versuchen. Siehe hierzu: https://mediawiki2latex.wmcloud.org/
Viele Grüße [[Benutzer:Dirk Hünniger|Dirk Hünniger]] 17:57, 1. Jul. 2026 (CEST)
:Hallo,
:das PDF habe ich nun erstellt und auf der Hauptseite des Buches den Link auf das PDF wieder hinzugefügt. Den LaTeX Quelltext des PDFs konnte ich leider nicht anhängen, da die MediaWiki Software die maximale Dateigröße bei Uploads beschränkt. Wenn du ihn benötigen solltest gib mir einfach Bescheid.
:Viele Grüße [[Benutzer:Dirk Hünniger|Dirk Hünniger]] 11:39, 2. Jul. 2026 (CEST)
0wsi353996i0ge37y8eqwfhkkz0i7fr
Strukturierte Programmierung
0
84057
1088543
1087503
2026-07-02T08:53:16Z
Gebu
27433
/* Konstanten */ + Leerzeichen
1088543
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 Unterprogrammeinheiten wie '''Module''' oder '''Klassen''' werden in der Regel mit eindeutigen Bezeichnern benannt, die üblicherweise mit einem '''Großbuchstaben''' beginnen.
Im Kontext eines Quellcodes ist es immer möglich, diese Unterprogrammeinheiten von anderen zu unterscheiden, die ebenfalls mit einem Großbuchstaben beginnen (beispielsweise Konstanten), weil die Bezeichner von Unterprogrammeinheiten von einer Blockanweisung (zum Beispiel geschweifte Klammern) für die Implementation von Programmcode oder von einem Separator (beispielsweise ".") zur qualifizierten Bezeichnung von Teilen der Unterprogrammeinheiten gefolgt werden.
Das Konzept von Unterprogrammeinheiten ist, dass mehrere Unterprogramme (Methoden, Prozeduren, Funktionen, Kommandos) sowie mehrere Konstanten, Variablen oder Datenstrukturen (Verbunde (struct, record), Arrays) in einer speicherbaren Datei zusammengefasst werden. Insofern handelt es sich bei solchen Unterprogrammeinheiten um die '''kleinsten dauerhaft speicherbaren Einheiten''' in einem Software-Projekten.
Unterprogrammeinheiten werden in strukturierten Programmiersprachen unter der Verwendung von Schlüsselwörtern wie zum Beispiel "program", "MODULE" oder "class" '''deklariert''':
<syntaxhighlight lang="Pascal">
(* Die Unterprogrammeinheit "Programmeinheit" in der Programmiersprache Pascal *)
program Programmeinheit;
begin
end.
</syntaxhighlight>
<syntaxhighlight lang="modula2">
(* Die Unterprogrammeinheit "Programmeinheit" in den Programmiersprachen Modula-2, Oberon oder Component Pascal *)
MODULE Programmeinheit;
BEGIN
END Programmeinheit.
</syntaxhighlight>
<syntaxhighlight lang="Java">
// Die Unterprogrammeinheit "Programmeinheit" in der Programmiersprache Java
public class Programmeinheit;
{
}
</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====
=====Programmeinheiten=====
Damit der sich hinter einem Bezeichner verborgene Inhalt eindeutig einer Programmeinheit 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.
Leider dürfen diese qualifizierten Importe beziehungsweise Bezeichnungen in manchen Programmiersprachen für gängige Unterprogrammeinheiten weggelassen werden, wie im folgenden Beispiel in der Programmiersprache Java:
<syntaxhighlight lang="Java">
public class Test
{
public static void main (String [] args)
{
}
}
</syntaxhighlight>
Ein Aufruf des formal korrekt deklarierten Hauptprogramms "main" kann zu folgender völlig irritierender Fehlermeldung führen, wenn gar nicht die dafür vorgesehene Standard-Java-Klasse "java.lang.String" referenziert wird, weil sich im Software-Projekt, in dem sich das Hauptprogramm befindet, eine gleichnamige Klasse "String" definiert ist, die durch die Regeln der Programmiersprache vorrangig referenziert wird:
<syntaxhighlight lang="Java">
Error: Main method not found in class Test, please define the main method as: public static void main (String [] args)
</syntaxhighlight>
=====Datenstrukturen=====
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 Bezeichner
{
// 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 "Bezeichner"
java.lang.System.out.println ("Wert der globalen Variable = " + Bezeichner.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 "Bezeichner" 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 "'''Bezeichner.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]]
a5y6q8cjolae80q3canh71x5guk3xhd
1088544
1088543
2026-07-02T08:54:25Z
Gebu
27433
/* Datenstrukturen */ - Leerzeichen
1088544
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 Unterprogrammeinheiten wie '''Module''' oder '''Klassen''' werden in der Regel mit eindeutigen Bezeichnern benannt, die üblicherweise mit einem '''Großbuchstaben''' beginnen.
Im Kontext eines Quellcodes ist es immer möglich, diese Unterprogrammeinheiten von anderen zu unterscheiden, die ebenfalls mit einem Großbuchstaben beginnen (beispielsweise Konstanten), weil die Bezeichner von Unterprogrammeinheiten von einer Blockanweisung (zum Beispiel geschweifte Klammern) für die Implementation von Programmcode oder von einem Separator (beispielsweise ".") zur qualifizierten Bezeichnung von Teilen der Unterprogrammeinheiten gefolgt werden.
Das Konzept von Unterprogrammeinheiten ist, dass mehrere Unterprogramme (Methoden, Prozeduren, Funktionen, Kommandos) sowie mehrere Konstanten, Variablen oder Datenstrukturen (Verbunde (struct, record), Arrays) in einer speicherbaren Datei zusammengefasst werden. Insofern handelt es sich bei solchen Unterprogrammeinheiten um die '''kleinsten dauerhaft speicherbaren Einheiten''' in einem Software-Projekten.
Unterprogrammeinheiten werden in strukturierten Programmiersprachen unter der Verwendung von Schlüsselwörtern wie zum Beispiel "program", "MODULE" oder "class" '''deklariert''':
<syntaxhighlight lang="Pascal">
(* Die Unterprogrammeinheit "Programmeinheit" in der Programmiersprache Pascal *)
program Programmeinheit;
begin
end.
</syntaxhighlight>
<syntaxhighlight lang="modula2">
(* Die Unterprogrammeinheit "Programmeinheit" in den Programmiersprachen Modula-2, Oberon oder Component Pascal *)
MODULE Programmeinheit;
BEGIN
END Programmeinheit.
</syntaxhighlight>
<syntaxhighlight lang="Java">
// Die Unterprogrammeinheit "Programmeinheit" in der Programmiersprache Java
public class Programmeinheit;
{
}
</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====
=====Programmeinheiten=====
Damit der sich hinter einem Bezeichner verborgene Inhalt eindeutig einer Programmeinheit 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.
Leider dürfen diese qualifizierten Importe beziehungsweise Bezeichnungen in manchen Programmiersprachen für gängige Unterprogrammeinheiten weggelassen werden, wie im folgenden Beispiel in der Programmiersprache Java:
<syntaxhighlight lang="Java">
public class Test
{
public static void main (String [] args)
{
}
}
</syntaxhighlight>
Ein Aufruf des formal korrekt deklarierten Hauptprogramms "main" kann zu folgender völlig irritierender Fehlermeldung führen, wenn gar nicht die dafür vorgesehene Standard-Java-Klasse "java.lang.String" referenziert wird, weil sich im Software-Projekt, in dem sich das Hauptprogramm befindet, eine gleichnamige Klasse "String" definiert ist, die durch die Regeln der Programmiersprache vorrangig referenziert wird:
<syntaxhighlight lang="Java">
Error: Main method not found in class Test, please define the main method as: public static void main (String [] args)
</syntaxhighlight>
=====Datenstrukturen=====
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 Bezeichner
{
// 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 "Bezeichner"
java.lang.System.out.println ("Wert der globalen Variable = " + Bezeichner.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 "Bezeichner" 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 "'''Bezeichner.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]]
1d8b0csr16zfe0obo75wzn9h32uwt11
Diskussion:Strukturierte Programmierung
1
84137
1088540
1022193
2026-07-02T08:23:11Z
Gebu
27433
+ Veraltetes im Kommentar zu Beginn
1088540
wikitext
text/x-wiki
== Erweiterung ==
Diese Zusammenstellung von Hinweisen gefällt mir. In vielen Lehrbüchern werden immer wieder dieselben Ratschläge benötigt -- hier sind sie als Sammlung zu finden. ''Ich glaube, ich werde auch etwas beitragen.'' -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
:Die Unterstützung würde mich sehr freuen! --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
Auch die folgenden Themen könnten besprochen werden.
;Untergliederung: Das Buch bekommt inzwischen so viele Einzelthemen, dass eine Gliederung in Bereiche (und damit in eigenständige Kapitel) sinnvoll wäre. ''Ich habe mir darüber noch keine genaueren Gedanken gemacht.'' -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Diese Idee ist mir auch schon gekommen, aber ich habe mir auch noch keine weiteren Gedanken gemacht. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
::: Diese Anleitung nimmt immer mehr Inhalt an (und sobald andere Programmierer es sehen, dürfte noch mehr dazu kommen). Ich empfehle deshalb die Aufteilung in einzelne Kapitel (Seiten); als Hauptthemen geht mir so etwas durch den Kopf (noch nicht als Formulierungen der Kapitel):
:::* Gestaltung von Quelltexten
:::* Konstante, Variable, Bezeichner, Deklaration
:::* Zusammenarbeit zwischen Quelldateien/Modulen/DLLs usw.
:::* Steuerung des Arbeitsablaufs
:::* alles, was zur OOP relevant ist
::: Ich bin mir noch unsicher, ob alle bisherigen Stichpunkte auf diese Weise sinnvoll untergebracht werden. Aber vielleicht kommen wir auf diese Weise zu einer Struktur – denn um Struktur geht es hier schließlich. {{Smiley|lol}} -- [[Benutzer:Juetho|Jürgen]] 13:32, 6. Jan. 2012 (CET)
;Einrückungen und Zeilenumbruch: Du hast den Code automatisch eingerückt. Das sollte in einem eigenen Punkt erläutert werden. Ein Zeichen ist dafür entschieden zuwenig; man sollte mindestens zwei Zeichen verwenden. Bitte setze aber keine absoluten Regeln fest. Beispielsweise kann man bei diesen [[C++-Programmierung/ Einführung zum Buch/ Konventionen|Konventionen]] unterschiedlicher Meinung sind. Wichtig sind klare Festlegungen innerhalb eines Programms, damit die Struktur auch für neue Leser erkennbar bleibt. (Das hilft auch dem Autor eines Codes, wenn er nach zwei Wochen, Monaten oder Jahren etwas überarbeiten muss.) -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Ich bevorzuge den Tabulator - mehrfache Leerzeichen stammen aus der Zeit der ersten Texteditoren-, aber ich vermute und befürchte, dass dies in der Wiki-Software zur Zeit noch nicht unterstützt wird. Für die Compiler spielt dies keine Rolle, aber dafür umso mehr für die Menschen, die davor sitzen ;-) --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
::: Ich bevorzuge eigentlich ebenfalls Tabs, zumal in der IDE die Tab-Größe in der Regel eingestellt werden kann. Aber beim Kopieren z.B. über Foren geht der eigene Standard verloren; dann sind Leerzeichen besser, weil kompatibler. Mir ist vor allem aufgefallen, dass deine Code-Beispiele nur um ein Zeichen eingerückt sind. Es mag sein, dass das bei dir ein Tab war, und beim Herüberkopieren wurde das zu einem einsamen Leerzeichen. qed -- [[Benutzer:Juetho|Jürgen]] 13:32, 6. Jan. 2012 (CET)
;Deutsch oder Englisch: Ich empfehle, für Bezeichner generell englische Begriffe zu wählen, auch wenn ich die Verwendung der deutschen Sprache im deutschen Sprachraum entschieden bevorzuge. Zur Erläuterung meines Standpunkts (mit Beispielen) siehe [[Arbeiten mit .NET: Allgemeines/ Anhang/ Namenskonventionen#Deutsch oder Englisch?|.NET-Namenskonventionen]]. -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Damit habe ich keine Probleme, zumal ich sowieso vor hatte, das Wikibook ins Englische zu übertragen. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
Es ist erstaunlich, was einem bei Verbessern noch so alles einfällt. Ich habe einiges vom Diskutierten bereits umgesetzt und bin mir aber bewusst, dass dies alles noch nicht fertig und noch nicht der Weisheit letzter Schluss ist. Die sinnvolle Strukturierung von Artikeln ist mindestens so herausfordernd, wie diejenige von Programmen ;-) --[[Benutzer:Bautsch|Bautsch]] 12:49, 7. Jan. 2012 (CET)
== Kein Missbrauch bei Imports ==
Ich möchte widersprechen: Es ist kein Missbrauch, wenn <tt>using</tt> bzw. <tt>imports</tt> zur Verkürzung des Quellcodes genutzt wird. Gerade bei .NET mit den langen, mehrstufigen Namespace-Bezeichnern macht die ständige Wiederholung des vollständigen Bezeichners den Code sehr unübersichtlich. Der folgende Quelltext (aus der .NET-Doku kopiert) ist doch überhaupt nicht mehr lesbar, und es gibt Namespaces mit noch viel längeren Namen:
{{Syntax|lang=csharp|border=2|code=
public void InsertRow(string connectionString)
{
string queryString = "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')";
using (System.Data.OracleClient.OracleConnection connection
= new System.Data.OracleClient.OracleConnection(connectionString))
{
System.Data.OracleClient.OracleCommand command = new System.Data.OracleClient.OracleCommand(queryString);
// do anything
}
} }}
Man muss also in der Praxis abwägen. Bei "einfachen" Bezeichnern wie MyModule passt der Ratschlag, aber es gibt eben auch andere Situationen. -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
:Ich finde diesen Code gerade noch lesbar, verstehe das Argument aber sehr gut; insbesondere wenn auf engem Raum sehr viele Bezeichner aus einer fernen Bibliothek benutzt werden, kann das schnell albern und unübersichtlich aussehen. Bei einmaligem Auftreten finde ich das Ausschreiben im Allgemeinen schon recht hilfreich.
:Im engeren Sinne meinte ich aber besonders die Imports mit Wildcards, so wie zum Beispiel:
import myPackage.*;
import yourPackage.*;
drawLine ();
Class var = new Class (); /* To which package does Class belong ? */
und ähnliche Fälle. Ich werde das demnächst einmal genauer und etwas umfangreicher formulieren. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
== For-Schleifen ==
Mit dem was unter "For-Schleifen" steht, bin ich nicht ganz einverstanden bzw. erkenne nicht so ganz die Relevanz. Praktisch jede Programmiersprache, die die dortige Syntax kennt (z.B. C ab C99, C++, Java, C#, D), erlaubt auch ...
for(int i = 0; i < max; i++)
{
...
}
... mit dem entscheidenen Vorteil, dass i "so lokal wie möglich ist" (siehe weiter oben unter "Prinzip der Lokalität"), nämlich nur innerhalb des Schleifen-Blocks. Wenn wirklich nur stumpf gezählt wird und die Zähl-Variable danach nicht mehr benötigt wird, sollte immer die For-Schleife den Vorzug bekommen. Zudem würd ich die for-Schleifen noch zum "einfachen Sprachumfang" zählen, da immer sehr einfach und praktisch immer (in der obigen Form) identisch implementiert. Wenn man sich dagegen mal die Regeln für switch/case-Anweisungen vermeintlich ähnlicher Sprachen anguckt ... --[[Spezial:Beiträge/92.196.53.40|92.196.53.40]] 21:51, 26. Mär. 2012 (CEST)
: Zustimmung zu deinen Bedenken. Es sind wohl die Randbedingungen zu beachten: Sofern dasselbe ''i'' vorher oder nachher benutzt wird, kann <tt>for</tt> durch eine der anderen Schleifen ersetzt werden. Du darfst Text und Gliederung gerne überarbeiten. -- [[Benutzer:Juetho|Jürgen]] 09:04, 27. Mär. 2012 (CEST)
:: Ich würd es eigentlich nur löschen wollen (was ich aber nicht tun werde). Die genannten Argumente überzeugen mich nicht und "... unter Umständen <small>[welchen?]</small> ... auschließlich ..." spricht auch nicht für eine eindeutigen Standpunkt des Autors. Wenn eine Sprache einen Zählschleifenkonstrukt mitbringt, sollte man es auch nutzen dürfen, denn es macht dem Quellcode-Leser deutlich, dass da nur gezählt wird (möglichst fixe Anzahl und Schrittweite) und nicht auf die Nichterfüllung einer while-Bedingung gewartet wird. --[[Spezial:Beiträge/92.196.30.97|92.196.30.97]] 21:20, 27. Mär. 2012 (CEST)
:::Ich bedanke mich für den wichtigen und richtigen Hinweis zur Lokalität und die Nichtlöschung des Abschnittes. Die Information habe ich mit einer weiteren Ergänzung in das Wikibook eingebaut. --[[Benutzer:Bautsch|Bautsch]] 08:39, 30. Mär. 2012 (CEST)
== Standard-Vorsilben und Bezeichner ==
Bei der Schreibweise von Bezeichnern und Methoden könnte man noch anfügen, dass bestimmte Standard-Vorsilben allgemein üblich sind. '''set'''Foo '''get'''Foo und andere wie '''is'''Foo '''my'''Foo '''del'''Foo '''copy'''Foo recht gebräuchlich. Der Bezug zum Objekt bleibt dadurch gewahrt. Ebenso kann man die Joker (Metasyntaktische Variablen) Foo, Bar, Bas, für den Quellcode erläutern. (z.B. am Beispiel von Parameterlisten). Weiterhin sollten gängige Zählvariablen erläutert werden. Das i und j meist für Iterationen gebraucht werden. --[[Benutzer:Mjchael|mjchael]] 13:57, 30. Mär. 2012 (CEST)
: my, del und copy ist mir noch nie untergekommen. Das dürfte auch zu sprachspezifisch werden (ist es teileweise schon jetzt, finde ich). Ab irgendeinem Punkt kann man nur noch auf die Styleguides der einzelnen Sprachen verweisen. --[[Spezial:Beiträge/92.196.71.109|92.196.71.109]] 17:07, 31. Mär. 2012 (CEST)
== Leerräume ==
"Leerräume, also zum Beispiel Leerzeichen, Zeilen- und Seitenumbrüche oder Tabulatoren, werden - genauso wie Kommentare - vom Compiler überlesen und dienen daher ausschließlich zur Verbesserung der Lesbarkeit für die Programmierer." Stimmt das wirklich immer? Zumindest für bestimmte Scriptsprachen trifft es nicht zu. In Python z.B. ist korrekte Einrückung absolut notwendig (siehe [[w:Python (Programmiersprache)#Strukturierung durch Einrücken]]). Ich würde hier zumindest einen entsprechenden Hinweis anbringen, dass es durchaus Ausnahmen geben kann. --[[Benutzer:Versat|Versat]] 09:36, 4. Dez. 2015 (CET)
: Zustimmung zu deinem Hinweis; bei Basic (vermutlich bei allen Dialekten) ist das Zeilenende (also ein einfacher Zeilenumbruch) die Markierung für den Abschluss einer Anweisung. Also ändere es passend. -- [[Benutzer:Juetho|Jürgen]] 10:03, 4. Dez. 2015 (CET)
: Danke für die Hinweise ! Ich stimme auch zu, denn auch bei FORTRAN mussten am Zeilenanfang bestimmte Einrückungen eingehalten werden, damit die Lochkarten korrekt gestanzt werden konnten. Ich hatte das verdrängt, und habe den Text jetzt entsprechend geändert. --[[Benutzer:Bautsch|Bautsch]] 16:19, 5. Dez. 2015 (CET)
== Beispiele Überladung des Divisionsoperators ==
Huhu, eine Frage wegen den Beispielen in diesem Abschnitt, laut Kommentar sind dort zwei Beispiele für Pascal, ist das nicht eher C, weil die Zuordnung der Werte in Pascal mit := erfolgen, oder? -- [[Benutzer:Zase Wieder|Zase Wieder]] 10:23, 28. Nov. 2023 (CET)
:Ich schätze es handelt sich hier lediglich um einen Flüchtigkeitsfehler. Kommentare und Syntaxhighlight sprechen für das Ziel Pascal. Könnte ja auch sein, dass es Zuweisungen aus dem Programmbeginn sein sollen. Nach der Projektbeschreibung (offensichtlicher Fehler) hab ich mal Doppelpunkte ergänzt. Für den Fall der Fälle: Ping@[[Benutzer:Bautsch|Bautsch]]. Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 15:39, 28. Nov. 2023 (CET)
::Ich danke Euch beiden, und habe mir auch noch erlaubt, "div" mit kleinen Buchstaben zu schreiben... :-) --[[Benutzer:Bautsch|Bautsch]] 16:50, 28. Nov. 2023 (CET)
:::ich danke auch, nur noch eine Kleinigkeit: die Zuweisungart des Typs ist mir nicht so bekannt, ist es nicht umgekehrt ''xxx: integer;'' statt ''int xxx;''und erfolgt diese Typenanweisung nicht „außerhalb“ in der Präambel. Auch scheinen leider unter der Literatur Ihre/Deine Beiträge nicht mehr bei ENISA aufrufbar zu sein, gibt es Alternativen (crises verbessert google zu crisis, ist letzteres gemeint?). Danke im Voraus und danke für die ganzen Kapitel hier auf de.wikibooks.org :). --grüße [[Benutzer:Zase Wieder|Zase Wieder]] 20:45, 12. Dez. 2023 (CET)
== Veraltetes im Kommentar zu Beginn ==
Derzeit im Buch: „Dazu gehören der Dateiname, der Modulname (respektive Klassenname) …“
Beides ist meines Wissens veraltet. Außerdem widerspricht beides dem DRY-Grundsatz („Wiederhole dich nicht.“). In Java müsste beispielsweise bei Änderung des Klassennamens sowohl der Dateiname als auch der Klassenname im Kommentar zu Beginn geändert werden. – [[Benutzer:Gebu|Gebu]] 10:23, 2. Jul. 2026 (CEST)
7mzky390rfuh741ovwp6boix2arciga
1088541
1088540
2026-07-02T08:35:31Z
Gebu
27433
+ Ist der Begriff „Prozeduren“ veraltet?
1088541
wikitext
text/x-wiki
== Erweiterung ==
Diese Zusammenstellung von Hinweisen gefällt mir. In vielen Lehrbüchern werden immer wieder dieselben Ratschläge benötigt -- hier sind sie als Sammlung zu finden. ''Ich glaube, ich werde auch etwas beitragen.'' -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
:Die Unterstützung würde mich sehr freuen! --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
Auch die folgenden Themen könnten besprochen werden.
;Untergliederung: Das Buch bekommt inzwischen so viele Einzelthemen, dass eine Gliederung in Bereiche (und damit in eigenständige Kapitel) sinnvoll wäre. ''Ich habe mir darüber noch keine genaueren Gedanken gemacht.'' -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Diese Idee ist mir auch schon gekommen, aber ich habe mir auch noch keine weiteren Gedanken gemacht. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
::: Diese Anleitung nimmt immer mehr Inhalt an (und sobald andere Programmierer es sehen, dürfte noch mehr dazu kommen). Ich empfehle deshalb die Aufteilung in einzelne Kapitel (Seiten); als Hauptthemen geht mir so etwas durch den Kopf (noch nicht als Formulierungen der Kapitel):
:::* Gestaltung von Quelltexten
:::* Konstante, Variable, Bezeichner, Deklaration
:::* Zusammenarbeit zwischen Quelldateien/Modulen/DLLs usw.
:::* Steuerung des Arbeitsablaufs
:::* alles, was zur OOP relevant ist
::: Ich bin mir noch unsicher, ob alle bisherigen Stichpunkte auf diese Weise sinnvoll untergebracht werden. Aber vielleicht kommen wir auf diese Weise zu einer Struktur – denn um Struktur geht es hier schließlich. {{Smiley|lol}} -- [[Benutzer:Juetho|Jürgen]] 13:32, 6. Jan. 2012 (CET)
;Einrückungen und Zeilenumbruch: Du hast den Code automatisch eingerückt. Das sollte in einem eigenen Punkt erläutert werden. Ein Zeichen ist dafür entschieden zuwenig; man sollte mindestens zwei Zeichen verwenden. Bitte setze aber keine absoluten Regeln fest. Beispielsweise kann man bei diesen [[C++-Programmierung/ Einführung zum Buch/ Konventionen|Konventionen]] unterschiedlicher Meinung sind. Wichtig sind klare Festlegungen innerhalb eines Programms, damit die Struktur auch für neue Leser erkennbar bleibt. (Das hilft auch dem Autor eines Codes, wenn er nach zwei Wochen, Monaten oder Jahren etwas überarbeiten muss.) -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Ich bevorzuge den Tabulator - mehrfache Leerzeichen stammen aus der Zeit der ersten Texteditoren-, aber ich vermute und befürchte, dass dies in der Wiki-Software zur Zeit noch nicht unterstützt wird. Für die Compiler spielt dies keine Rolle, aber dafür umso mehr für die Menschen, die davor sitzen ;-) --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
::: Ich bevorzuge eigentlich ebenfalls Tabs, zumal in der IDE die Tab-Größe in der Regel eingestellt werden kann. Aber beim Kopieren z.B. über Foren geht der eigene Standard verloren; dann sind Leerzeichen besser, weil kompatibler. Mir ist vor allem aufgefallen, dass deine Code-Beispiele nur um ein Zeichen eingerückt sind. Es mag sein, dass das bei dir ein Tab war, und beim Herüberkopieren wurde das zu einem einsamen Leerzeichen. qed -- [[Benutzer:Juetho|Jürgen]] 13:32, 6. Jan. 2012 (CET)
;Deutsch oder Englisch: Ich empfehle, für Bezeichner generell englische Begriffe zu wählen, auch wenn ich die Verwendung der deutschen Sprache im deutschen Sprachraum entschieden bevorzuge. Zur Erläuterung meines Standpunkts (mit Beispielen) siehe [[Arbeiten mit .NET: Allgemeines/ Anhang/ Namenskonventionen#Deutsch oder Englisch?|.NET-Namenskonventionen]]. -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Damit habe ich keine Probleme, zumal ich sowieso vor hatte, das Wikibook ins Englische zu übertragen. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
Es ist erstaunlich, was einem bei Verbessern noch so alles einfällt. Ich habe einiges vom Diskutierten bereits umgesetzt und bin mir aber bewusst, dass dies alles noch nicht fertig und noch nicht der Weisheit letzter Schluss ist. Die sinnvolle Strukturierung von Artikeln ist mindestens so herausfordernd, wie diejenige von Programmen ;-) --[[Benutzer:Bautsch|Bautsch]] 12:49, 7. Jan. 2012 (CET)
== Kein Missbrauch bei Imports ==
Ich möchte widersprechen: Es ist kein Missbrauch, wenn <tt>using</tt> bzw. <tt>imports</tt> zur Verkürzung des Quellcodes genutzt wird. Gerade bei .NET mit den langen, mehrstufigen Namespace-Bezeichnern macht die ständige Wiederholung des vollständigen Bezeichners den Code sehr unübersichtlich. Der folgende Quelltext (aus der .NET-Doku kopiert) ist doch überhaupt nicht mehr lesbar, und es gibt Namespaces mit noch viel längeren Namen:
{{Syntax|lang=csharp|border=2|code=
public void InsertRow(string connectionString)
{
string queryString = "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')";
using (System.Data.OracleClient.OracleConnection connection
= new System.Data.OracleClient.OracleConnection(connectionString))
{
System.Data.OracleClient.OracleCommand command = new System.Data.OracleClient.OracleCommand(queryString);
// do anything
}
} }}
Man muss also in der Praxis abwägen. Bei "einfachen" Bezeichnern wie MyModule passt der Ratschlag, aber es gibt eben auch andere Situationen. -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
:Ich finde diesen Code gerade noch lesbar, verstehe das Argument aber sehr gut; insbesondere wenn auf engem Raum sehr viele Bezeichner aus einer fernen Bibliothek benutzt werden, kann das schnell albern und unübersichtlich aussehen. Bei einmaligem Auftreten finde ich das Ausschreiben im Allgemeinen schon recht hilfreich.
:Im engeren Sinne meinte ich aber besonders die Imports mit Wildcards, so wie zum Beispiel:
import myPackage.*;
import yourPackage.*;
drawLine ();
Class var = new Class (); /* To which package does Class belong ? */
und ähnliche Fälle. Ich werde das demnächst einmal genauer und etwas umfangreicher formulieren. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
== For-Schleifen ==
Mit dem was unter "For-Schleifen" steht, bin ich nicht ganz einverstanden bzw. erkenne nicht so ganz die Relevanz. Praktisch jede Programmiersprache, die die dortige Syntax kennt (z.B. C ab C99, C++, Java, C#, D), erlaubt auch ...
for(int i = 0; i < max; i++)
{
...
}
... mit dem entscheidenen Vorteil, dass i "so lokal wie möglich ist" (siehe weiter oben unter "Prinzip der Lokalität"), nämlich nur innerhalb des Schleifen-Blocks. Wenn wirklich nur stumpf gezählt wird und die Zähl-Variable danach nicht mehr benötigt wird, sollte immer die For-Schleife den Vorzug bekommen. Zudem würd ich die for-Schleifen noch zum "einfachen Sprachumfang" zählen, da immer sehr einfach und praktisch immer (in der obigen Form) identisch implementiert. Wenn man sich dagegen mal die Regeln für switch/case-Anweisungen vermeintlich ähnlicher Sprachen anguckt ... --[[Spezial:Beiträge/92.196.53.40|92.196.53.40]] 21:51, 26. Mär. 2012 (CEST)
: Zustimmung zu deinen Bedenken. Es sind wohl die Randbedingungen zu beachten: Sofern dasselbe ''i'' vorher oder nachher benutzt wird, kann <tt>for</tt> durch eine der anderen Schleifen ersetzt werden. Du darfst Text und Gliederung gerne überarbeiten. -- [[Benutzer:Juetho|Jürgen]] 09:04, 27. Mär. 2012 (CEST)
:: Ich würd es eigentlich nur löschen wollen (was ich aber nicht tun werde). Die genannten Argumente überzeugen mich nicht und "... unter Umständen <small>[welchen?]</small> ... auschließlich ..." spricht auch nicht für eine eindeutigen Standpunkt des Autors. Wenn eine Sprache einen Zählschleifenkonstrukt mitbringt, sollte man es auch nutzen dürfen, denn es macht dem Quellcode-Leser deutlich, dass da nur gezählt wird (möglichst fixe Anzahl und Schrittweite) und nicht auf die Nichterfüllung einer while-Bedingung gewartet wird. --[[Spezial:Beiträge/92.196.30.97|92.196.30.97]] 21:20, 27. Mär. 2012 (CEST)
:::Ich bedanke mich für den wichtigen und richtigen Hinweis zur Lokalität und die Nichtlöschung des Abschnittes. Die Information habe ich mit einer weiteren Ergänzung in das Wikibook eingebaut. --[[Benutzer:Bautsch|Bautsch]] 08:39, 30. Mär. 2012 (CEST)
== Standard-Vorsilben und Bezeichner ==
Bei der Schreibweise von Bezeichnern und Methoden könnte man noch anfügen, dass bestimmte Standard-Vorsilben allgemein üblich sind. '''set'''Foo '''get'''Foo und andere wie '''is'''Foo '''my'''Foo '''del'''Foo '''copy'''Foo recht gebräuchlich. Der Bezug zum Objekt bleibt dadurch gewahrt. Ebenso kann man die Joker (Metasyntaktische Variablen) Foo, Bar, Bas, für den Quellcode erläutern. (z.B. am Beispiel von Parameterlisten). Weiterhin sollten gängige Zählvariablen erläutert werden. Das i und j meist für Iterationen gebraucht werden. --[[Benutzer:Mjchael|mjchael]] 13:57, 30. Mär. 2012 (CEST)
: my, del und copy ist mir noch nie untergekommen. Das dürfte auch zu sprachspezifisch werden (ist es teileweise schon jetzt, finde ich). Ab irgendeinem Punkt kann man nur noch auf die Styleguides der einzelnen Sprachen verweisen. --[[Spezial:Beiträge/92.196.71.109|92.196.71.109]] 17:07, 31. Mär. 2012 (CEST)
== Leerräume ==
"Leerräume, also zum Beispiel Leerzeichen, Zeilen- und Seitenumbrüche oder Tabulatoren, werden - genauso wie Kommentare - vom Compiler überlesen und dienen daher ausschließlich zur Verbesserung der Lesbarkeit für die Programmierer." Stimmt das wirklich immer? Zumindest für bestimmte Scriptsprachen trifft es nicht zu. In Python z.B. ist korrekte Einrückung absolut notwendig (siehe [[w:Python (Programmiersprache)#Strukturierung durch Einrücken]]). Ich würde hier zumindest einen entsprechenden Hinweis anbringen, dass es durchaus Ausnahmen geben kann. --[[Benutzer:Versat|Versat]] 09:36, 4. Dez. 2015 (CET)
: Zustimmung zu deinem Hinweis; bei Basic (vermutlich bei allen Dialekten) ist das Zeilenende (also ein einfacher Zeilenumbruch) die Markierung für den Abschluss einer Anweisung. Also ändere es passend. -- [[Benutzer:Juetho|Jürgen]] 10:03, 4. Dez. 2015 (CET)
: Danke für die Hinweise ! Ich stimme auch zu, denn auch bei FORTRAN mussten am Zeilenanfang bestimmte Einrückungen eingehalten werden, damit die Lochkarten korrekt gestanzt werden konnten. Ich hatte das verdrängt, und habe den Text jetzt entsprechend geändert. --[[Benutzer:Bautsch|Bautsch]] 16:19, 5. Dez. 2015 (CET)
== Beispiele Überladung des Divisionsoperators ==
Huhu, eine Frage wegen den Beispielen in diesem Abschnitt, laut Kommentar sind dort zwei Beispiele für Pascal, ist das nicht eher C, weil die Zuordnung der Werte in Pascal mit := erfolgen, oder? -- [[Benutzer:Zase Wieder|Zase Wieder]] 10:23, 28. Nov. 2023 (CET)
:Ich schätze es handelt sich hier lediglich um einen Flüchtigkeitsfehler. Kommentare und Syntaxhighlight sprechen für das Ziel Pascal. Könnte ja auch sein, dass es Zuweisungen aus dem Programmbeginn sein sollen. Nach der Projektbeschreibung (offensichtlicher Fehler) hab ich mal Doppelpunkte ergänzt. Für den Fall der Fälle: Ping@[[Benutzer:Bautsch|Bautsch]]. Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 15:39, 28. Nov. 2023 (CET)
::Ich danke Euch beiden, und habe mir auch noch erlaubt, "div" mit kleinen Buchstaben zu schreiben... :-) --[[Benutzer:Bautsch|Bautsch]] 16:50, 28. Nov. 2023 (CET)
:::ich danke auch, nur noch eine Kleinigkeit: die Zuweisungart des Typs ist mir nicht so bekannt, ist es nicht umgekehrt ''xxx: integer;'' statt ''int xxx;''und erfolgt diese Typenanweisung nicht „außerhalb“ in der Präambel. Auch scheinen leider unter der Literatur Ihre/Deine Beiträge nicht mehr bei ENISA aufrufbar zu sein, gibt es Alternativen (crises verbessert google zu crisis, ist letzteres gemeint?). Danke im Voraus und danke für die ganzen Kapitel hier auf de.wikibooks.org :). --grüße [[Benutzer:Zase Wieder|Zase Wieder]] 20:45, 12. Dez. 2023 (CET)
== Veraltetes im Kommentar zu Beginn ==
Derzeit im Buch: „Dazu gehören der Dateiname, der Modulname (respektive Klassenname) …“
Beides ist meines Wissens veraltet. Außerdem widerspricht beides dem DRY-Grundsatz („Wiederhole dich nicht.“). In Java müsste beispielsweise bei Änderung des Klassennamens sowohl der Dateiname als auch der Klassenname im Kommentar zu Beginn geändert werden. – [[Benutzer:Gebu|Gebu]] 10:23, 2. Jul. 2026 (CEST)
== Ist der Begriff „Prozeduren“ veraltet? ==
Derzeit im Buch: „… für Methoden (respektive für Prozeduren oder für Funktionen) …“.
Prozeduren gab es mal in der historischen Programmiersprache Pascal. Wird in aktuellen Programmiersprachen noch zwischen Prozedur und Funktion bzw. Methode unterschieden? – [[Benutzer:Gebu|Gebu]] 10:34, 2. Jul. 2026 (CEST)
awvxbmnunryov4my3fb4r3grtb60xlu
1088542
1088541
2026-07-02T08:45:06Z
Gebu
27433
Minuszeichen im Beispiel in Component Pascal
1088542
wikitext
text/x-wiki
== Erweiterung ==
Diese Zusammenstellung von Hinweisen gefällt mir. In vielen Lehrbüchern werden immer wieder dieselben Ratschläge benötigt -- hier sind sie als Sammlung zu finden. ''Ich glaube, ich werde auch etwas beitragen.'' -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
:Die Unterstützung würde mich sehr freuen! --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
Auch die folgenden Themen könnten besprochen werden.
;Untergliederung: Das Buch bekommt inzwischen so viele Einzelthemen, dass eine Gliederung in Bereiche (und damit in eigenständige Kapitel) sinnvoll wäre. ''Ich habe mir darüber noch keine genaueren Gedanken gemacht.'' -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Diese Idee ist mir auch schon gekommen, aber ich habe mir auch noch keine weiteren Gedanken gemacht. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
::: Diese Anleitung nimmt immer mehr Inhalt an (und sobald andere Programmierer es sehen, dürfte noch mehr dazu kommen). Ich empfehle deshalb die Aufteilung in einzelne Kapitel (Seiten); als Hauptthemen geht mir so etwas durch den Kopf (noch nicht als Formulierungen der Kapitel):
:::* Gestaltung von Quelltexten
:::* Konstante, Variable, Bezeichner, Deklaration
:::* Zusammenarbeit zwischen Quelldateien/Modulen/DLLs usw.
:::* Steuerung des Arbeitsablaufs
:::* alles, was zur OOP relevant ist
::: Ich bin mir noch unsicher, ob alle bisherigen Stichpunkte auf diese Weise sinnvoll untergebracht werden. Aber vielleicht kommen wir auf diese Weise zu einer Struktur – denn um Struktur geht es hier schließlich. {{Smiley|lol}} -- [[Benutzer:Juetho|Jürgen]] 13:32, 6. Jan. 2012 (CET)
;Einrückungen und Zeilenumbruch: Du hast den Code automatisch eingerückt. Das sollte in einem eigenen Punkt erläutert werden. Ein Zeichen ist dafür entschieden zuwenig; man sollte mindestens zwei Zeichen verwenden. Bitte setze aber keine absoluten Regeln fest. Beispielsweise kann man bei diesen [[C++-Programmierung/ Einführung zum Buch/ Konventionen|Konventionen]] unterschiedlicher Meinung sind. Wichtig sind klare Festlegungen innerhalb eines Programms, damit die Struktur auch für neue Leser erkennbar bleibt. (Das hilft auch dem Autor eines Codes, wenn er nach zwei Wochen, Monaten oder Jahren etwas überarbeiten muss.) -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Ich bevorzuge den Tabulator - mehrfache Leerzeichen stammen aus der Zeit der ersten Texteditoren-, aber ich vermute und befürchte, dass dies in der Wiki-Software zur Zeit noch nicht unterstützt wird. Für die Compiler spielt dies keine Rolle, aber dafür umso mehr für die Menschen, die davor sitzen ;-) --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
::: Ich bevorzuge eigentlich ebenfalls Tabs, zumal in der IDE die Tab-Größe in der Regel eingestellt werden kann. Aber beim Kopieren z.B. über Foren geht der eigene Standard verloren; dann sind Leerzeichen besser, weil kompatibler. Mir ist vor allem aufgefallen, dass deine Code-Beispiele nur um ein Zeichen eingerückt sind. Es mag sein, dass das bei dir ein Tab war, und beim Herüberkopieren wurde das zu einem einsamen Leerzeichen. qed -- [[Benutzer:Juetho|Jürgen]] 13:32, 6. Jan. 2012 (CET)
;Deutsch oder Englisch: Ich empfehle, für Bezeichner generell englische Begriffe zu wählen, auch wenn ich die Verwendung der deutschen Sprache im deutschen Sprachraum entschieden bevorzuge. Zur Erläuterung meines Standpunkts (mit Beispielen) siehe [[Arbeiten mit .NET: Allgemeines/ Anhang/ Namenskonventionen#Deutsch oder Englisch?|.NET-Namenskonventionen]]. -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Damit habe ich keine Probleme, zumal ich sowieso vor hatte, das Wikibook ins Englische zu übertragen. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
Es ist erstaunlich, was einem bei Verbessern noch so alles einfällt. Ich habe einiges vom Diskutierten bereits umgesetzt und bin mir aber bewusst, dass dies alles noch nicht fertig und noch nicht der Weisheit letzter Schluss ist. Die sinnvolle Strukturierung von Artikeln ist mindestens so herausfordernd, wie diejenige von Programmen ;-) --[[Benutzer:Bautsch|Bautsch]] 12:49, 7. Jan. 2012 (CET)
== Kein Missbrauch bei Imports ==
Ich möchte widersprechen: Es ist kein Missbrauch, wenn <tt>using</tt> bzw. <tt>imports</tt> zur Verkürzung des Quellcodes genutzt wird. Gerade bei .NET mit den langen, mehrstufigen Namespace-Bezeichnern macht die ständige Wiederholung des vollständigen Bezeichners den Code sehr unübersichtlich. Der folgende Quelltext (aus der .NET-Doku kopiert) ist doch überhaupt nicht mehr lesbar, und es gibt Namespaces mit noch viel längeren Namen:
{{Syntax|lang=csharp|border=2|code=
public void InsertRow(string connectionString)
{
string queryString = "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')";
using (System.Data.OracleClient.OracleConnection connection
= new System.Data.OracleClient.OracleConnection(connectionString))
{
System.Data.OracleClient.OracleCommand command = new System.Data.OracleClient.OracleCommand(queryString);
// do anything
}
} }}
Man muss also in der Praxis abwägen. Bei "einfachen" Bezeichnern wie MyModule passt der Ratschlag, aber es gibt eben auch andere Situationen. -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
:Ich finde diesen Code gerade noch lesbar, verstehe das Argument aber sehr gut; insbesondere wenn auf engem Raum sehr viele Bezeichner aus einer fernen Bibliothek benutzt werden, kann das schnell albern und unübersichtlich aussehen. Bei einmaligem Auftreten finde ich das Ausschreiben im Allgemeinen schon recht hilfreich.
:Im engeren Sinne meinte ich aber besonders die Imports mit Wildcards, so wie zum Beispiel:
import myPackage.*;
import yourPackage.*;
drawLine ();
Class var = new Class (); /* To which package does Class belong ? */
und ähnliche Fälle. Ich werde das demnächst einmal genauer und etwas umfangreicher formulieren. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
== For-Schleifen ==
Mit dem was unter "For-Schleifen" steht, bin ich nicht ganz einverstanden bzw. erkenne nicht so ganz die Relevanz. Praktisch jede Programmiersprache, die die dortige Syntax kennt (z.B. C ab C99, C++, Java, C#, D), erlaubt auch ...
for(int i = 0; i < max; i++)
{
...
}
... mit dem entscheidenen Vorteil, dass i "so lokal wie möglich ist" (siehe weiter oben unter "Prinzip der Lokalität"), nämlich nur innerhalb des Schleifen-Blocks. Wenn wirklich nur stumpf gezählt wird und die Zähl-Variable danach nicht mehr benötigt wird, sollte immer die For-Schleife den Vorzug bekommen. Zudem würd ich die for-Schleifen noch zum "einfachen Sprachumfang" zählen, da immer sehr einfach und praktisch immer (in der obigen Form) identisch implementiert. Wenn man sich dagegen mal die Regeln für switch/case-Anweisungen vermeintlich ähnlicher Sprachen anguckt ... --[[Spezial:Beiträge/92.196.53.40|92.196.53.40]] 21:51, 26. Mär. 2012 (CEST)
: Zustimmung zu deinen Bedenken. Es sind wohl die Randbedingungen zu beachten: Sofern dasselbe ''i'' vorher oder nachher benutzt wird, kann <tt>for</tt> durch eine der anderen Schleifen ersetzt werden. Du darfst Text und Gliederung gerne überarbeiten. -- [[Benutzer:Juetho|Jürgen]] 09:04, 27. Mär. 2012 (CEST)
:: Ich würd es eigentlich nur löschen wollen (was ich aber nicht tun werde). Die genannten Argumente überzeugen mich nicht und "... unter Umständen <small>[welchen?]</small> ... auschließlich ..." spricht auch nicht für eine eindeutigen Standpunkt des Autors. Wenn eine Sprache einen Zählschleifenkonstrukt mitbringt, sollte man es auch nutzen dürfen, denn es macht dem Quellcode-Leser deutlich, dass da nur gezählt wird (möglichst fixe Anzahl und Schrittweite) und nicht auf die Nichterfüllung einer while-Bedingung gewartet wird. --[[Spezial:Beiträge/92.196.30.97|92.196.30.97]] 21:20, 27. Mär. 2012 (CEST)
:::Ich bedanke mich für den wichtigen und richtigen Hinweis zur Lokalität und die Nichtlöschung des Abschnittes. Die Information habe ich mit einer weiteren Ergänzung in das Wikibook eingebaut. --[[Benutzer:Bautsch|Bautsch]] 08:39, 30. Mär. 2012 (CEST)
== Standard-Vorsilben und Bezeichner ==
Bei der Schreibweise von Bezeichnern und Methoden könnte man noch anfügen, dass bestimmte Standard-Vorsilben allgemein üblich sind. '''set'''Foo '''get'''Foo und andere wie '''is'''Foo '''my'''Foo '''del'''Foo '''copy'''Foo recht gebräuchlich. Der Bezug zum Objekt bleibt dadurch gewahrt. Ebenso kann man die Joker (Metasyntaktische Variablen) Foo, Bar, Bas, für den Quellcode erläutern. (z.B. am Beispiel von Parameterlisten). Weiterhin sollten gängige Zählvariablen erläutert werden. Das i und j meist für Iterationen gebraucht werden. --[[Benutzer:Mjchael|mjchael]] 13:57, 30. Mär. 2012 (CEST)
: my, del und copy ist mir noch nie untergekommen. Das dürfte auch zu sprachspezifisch werden (ist es teileweise schon jetzt, finde ich). Ab irgendeinem Punkt kann man nur noch auf die Styleguides der einzelnen Sprachen verweisen. --[[Spezial:Beiträge/92.196.71.109|92.196.71.109]] 17:07, 31. Mär. 2012 (CEST)
== Leerräume ==
"Leerräume, also zum Beispiel Leerzeichen, Zeilen- und Seitenumbrüche oder Tabulatoren, werden - genauso wie Kommentare - vom Compiler überlesen und dienen daher ausschließlich zur Verbesserung der Lesbarkeit für die Programmierer." Stimmt das wirklich immer? Zumindest für bestimmte Scriptsprachen trifft es nicht zu. In Python z.B. ist korrekte Einrückung absolut notwendig (siehe [[w:Python (Programmiersprache)#Strukturierung durch Einrücken]]). Ich würde hier zumindest einen entsprechenden Hinweis anbringen, dass es durchaus Ausnahmen geben kann. --[[Benutzer:Versat|Versat]] 09:36, 4. Dez. 2015 (CET)
: Zustimmung zu deinem Hinweis; bei Basic (vermutlich bei allen Dialekten) ist das Zeilenende (also ein einfacher Zeilenumbruch) die Markierung für den Abschluss einer Anweisung. Also ändere es passend. -- [[Benutzer:Juetho|Jürgen]] 10:03, 4. Dez. 2015 (CET)
: Danke für die Hinweise ! Ich stimme auch zu, denn auch bei FORTRAN mussten am Zeilenanfang bestimmte Einrückungen eingehalten werden, damit die Lochkarten korrekt gestanzt werden konnten. Ich hatte das verdrängt, und habe den Text jetzt entsprechend geändert. --[[Benutzer:Bautsch|Bautsch]] 16:19, 5. Dez. 2015 (CET)
== Beispiele Überladung des Divisionsoperators ==
Huhu, eine Frage wegen den Beispielen in diesem Abschnitt, laut Kommentar sind dort zwei Beispiele für Pascal, ist das nicht eher C, weil die Zuordnung der Werte in Pascal mit := erfolgen, oder? -- [[Benutzer:Zase Wieder|Zase Wieder]] 10:23, 28. Nov. 2023 (CET)
:Ich schätze es handelt sich hier lediglich um einen Flüchtigkeitsfehler. Kommentare und Syntaxhighlight sprechen für das Ziel Pascal. Könnte ja auch sein, dass es Zuweisungen aus dem Programmbeginn sein sollen. Nach der Projektbeschreibung (offensichtlicher Fehler) hab ich mal Doppelpunkte ergänzt. Für den Fall der Fälle: Ping@[[Benutzer:Bautsch|Bautsch]]. Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 15:39, 28. Nov. 2023 (CET)
::Ich danke Euch beiden, und habe mir auch noch erlaubt, "div" mit kleinen Buchstaben zu schreiben... :-) --[[Benutzer:Bautsch|Bautsch]] 16:50, 28. Nov. 2023 (CET)
:::ich danke auch, nur noch eine Kleinigkeit: die Zuweisungart des Typs ist mir nicht so bekannt, ist es nicht umgekehrt ''xxx: integer;'' statt ''int xxx;''und erfolgt diese Typenanweisung nicht „außerhalb“ in der Präambel. Auch scheinen leider unter der Literatur Ihre/Deine Beiträge nicht mehr bei ENISA aufrufbar zu sein, gibt es Alternativen (crises verbessert google zu crisis, ist letzteres gemeint?). Danke im Voraus und danke für die ganzen Kapitel hier auf de.wikibooks.org :). --grüße [[Benutzer:Zase Wieder|Zase Wieder]] 20:45, 12. Dez. 2023 (CET)
== Veraltetes im Kommentar zu Beginn ==
Derzeit im Buch: „Dazu gehören der Dateiname, der Modulname (respektive Klassenname) …“
Beides ist meines Wissens veraltet. Außerdem widerspricht beides dem DRY-Grundsatz („Wiederhole dich nicht.“). In Java müsste beispielsweise bei Änderung des Klassennamens sowohl der Dateiname als auch der Klassenname im Kommentar zu Beginn geändert werden. – [[Benutzer:Gebu|Gebu]] 10:23, 2. Jul. 2026 (CEST)
== Ist der Begriff „Prozeduren“ veraltet? ==
Derzeit im Buch: „… für Methoden (respektive für Prozeduren oder für Funktionen) …“.
Prozeduren gab es mal in der historischen Programmiersprache Pascal. Wird in aktuellen Programmiersprachen noch zwischen Prozedur und Funktion bzw. Methode unterschieden? – [[Benutzer:Gebu|Gebu]] 10:34, 2. Jul. 2026 (CEST)
== Minuszeichen im Beispiel in Component Pascal ==
Derzeit im Buch: „zahl-: LONGINT;“.
Ist hier das Minuszeichen falsch? – [[Benutzer:Gebu|Gebu]] 10:44, 2. Jul. 2026 (CEST)
lyv1yy40z5bhc8kk59yk5q9g37jd3lv
1088546
1088542
2026-07-02T09:11:01Z
Gebu
27433
+ Zuweisungskompatibilität / Zeichenketten
1088546
wikitext
text/x-wiki
== Erweiterung ==
Diese Zusammenstellung von Hinweisen gefällt mir. In vielen Lehrbüchern werden immer wieder dieselben Ratschläge benötigt -- hier sind sie als Sammlung zu finden. ''Ich glaube, ich werde auch etwas beitragen.'' -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
:Die Unterstützung würde mich sehr freuen! --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
Auch die folgenden Themen könnten besprochen werden.
;Untergliederung: Das Buch bekommt inzwischen so viele Einzelthemen, dass eine Gliederung in Bereiche (und damit in eigenständige Kapitel) sinnvoll wäre. ''Ich habe mir darüber noch keine genaueren Gedanken gemacht.'' -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Diese Idee ist mir auch schon gekommen, aber ich habe mir auch noch keine weiteren Gedanken gemacht. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
::: Diese Anleitung nimmt immer mehr Inhalt an (und sobald andere Programmierer es sehen, dürfte noch mehr dazu kommen). Ich empfehle deshalb die Aufteilung in einzelne Kapitel (Seiten); als Hauptthemen geht mir so etwas durch den Kopf (noch nicht als Formulierungen der Kapitel):
:::* Gestaltung von Quelltexten
:::* Konstante, Variable, Bezeichner, Deklaration
:::* Zusammenarbeit zwischen Quelldateien/Modulen/DLLs usw.
:::* Steuerung des Arbeitsablaufs
:::* alles, was zur OOP relevant ist
::: Ich bin mir noch unsicher, ob alle bisherigen Stichpunkte auf diese Weise sinnvoll untergebracht werden. Aber vielleicht kommen wir auf diese Weise zu einer Struktur – denn um Struktur geht es hier schließlich. {{Smiley|lol}} -- [[Benutzer:Juetho|Jürgen]] 13:32, 6. Jan. 2012 (CET)
;Einrückungen und Zeilenumbruch: Du hast den Code automatisch eingerückt. Das sollte in einem eigenen Punkt erläutert werden. Ein Zeichen ist dafür entschieden zuwenig; man sollte mindestens zwei Zeichen verwenden. Bitte setze aber keine absoluten Regeln fest. Beispielsweise kann man bei diesen [[C++-Programmierung/ Einführung zum Buch/ Konventionen|Konventionen]] unterschiedlicher Meinung sind. Wichtig sind klare Festlegungen innerhalb eines Programms, damit die Struktur auch für neue Leser erkennbar bleibt. (Das hilft auch dem Autor eines Codes, wenn er nach zwei Wochen, Monaten oder Jahren etwas überarbeiten muss.) -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Ich bevorzuge den Tabulator - mehrfache Leerzeichen stammen aus der Zeit der ersten Texteditoren-, aber ich vermute und befürchte, dass dies in der Wiki-Software zur Zeit noch nicht unterstützt wird. Für die Compiler spielt dies keine Rolle, aber dafür umso mehr für die Menschen, die davor sitzen ;-) --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
::: Ich bevorzuge eigentlich ebenfalls Tabs, zumal in der IDE die Tab-Größe in der Regel eingestellt werden kann. Aber beim Kopieren z.B. über Foren geht der eigene Standard verloren; dann sind Leerzeichen besser, weil kompatibler. Mir ist vor allem aufgefallen, dass deine Code-Beispiele nur um ein Zeichen eingerückt sind. Es mag sein, dass das bei dir ein Tab war, und beim Herüberkopieren wurde das zu einem einsamen Leerzeichen. qed -- [[Benutzer:Juetho|Jürgen]] 13:32, 6. Jan. 2012 (CET)
;Deutsch oder Englisch: Ich empfehle, für Bezeichner generell englische Begriffe zu wählen, auch wenn ich die Verwendung der deutschen Sprache im deutschen Sprachraum entschieden bevorzuge. Zur Erläuterung meines Standpunkts (mit Beispielen) siehe [[Arbeiten mit .NET: Allgemeines/ Anhang/ Namenskonventionen#Deutsch oder Englisch?|.NET-Namenskonventionen]]. -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
::Damit habe ich keine Probleme, zumal ich sowieso vor hatte, das Wikibook ins Englische zu übertragen. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
Es ist erstaunlich, was einem bei Verbessern noch so alles einfällt. Ich habe einiges vom Diskutierten bereits umgesetzt und bin mir aber bewusst, dass dies alles noch nicht fertig und noch nicht der Weisheit letzter Schluss ist. Die sinnvolle Strukturierung von Artikeln ist mindestens so herausfordernd, wie diejenige von Programmen ;-) --[[Benutzer:Bautsch|Bautsch]] 12:49, 7. Jan. 2012 (CET)
== Kein Missbrauch bei Imports ==
Ich möchte widersprechen: Es ist kein Missbrauch, wenn <tt>using</tt> bzw. <tt>imports</tt> zur Verkürzung des Quellcodes genutzt wird. Gerade bei .NET mit den langen, mehrstufigen Namespace-Bezeichnern macht die ständige Wiederholung des vollständigen Bezeichners den Code sehr unübersichtlich. Der folgende Quelltext (aus der .NET-Doku kopiert) ist doch überhaupt nicht mehr lesbar, und es gibt Namespaces mit noch viel längeren Namen:
{{Syntax|lang=csharp|border=2|code=
public void InsertRow(string connectionString)
{
string queryString = "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')";
using (System.Data.OracleClient.OracleConnection connection
= new System.Data.OracleClient.OracleConnection(connectionString))
{
System.Data.OracleClient.OracleCommand command = new System.Data.OracleClient.OracleCommand(queryString);
// do anything
}
} }}
Man muss also in der Praxis abwägen. Bei "einfachen" Bezeichnern wie MyModule passt der Ratschlag, aber es gibt eben auch andere Situationen. -- [[Benutzer:Juetho|Jürgen]] 09:28, 5. Jan. 2012 (CET)
:Ich finde diesen Code gerade noch lesbar, verstehe das Argument aber sehr gut; insbesondere wenn auf engem Raum sehr viele Bezeichner aus einer fernen Bibliothek benutzt werden, kann das schnell albern und unübersichtlich aussehen. Bei einmaligem Auftreten finde ich das Ausschreiben im Allgemeinen schon recht hilfreich.
:Im engeren Sinne meinte ich aber besonders die Imports mit Wildcards, so wie zum Beispiel:
import myPackage.*;
import yourPackage.*;
drawLine ();
Class var = new Class (); /* To which package does Class belong ? */
und ähnliche Fälle. Ich werde das demnächst einmal genauer und etwas umfangreicher formulieren. --[[Benutzer:Bautsch|Bautsch]] 01:55, 6. Jan. 2012 (CET)
== For-Schleifen ==
Mit dem was unter "For-Schleifen" steht, bin ich nicht ganz einverstanden bzw. erkenne nicht so ganz die Relevanz. Praktisch jede Programmiersprache, die die dortige Syntax kennt (z.B. C ab C99, C++, Java, C#, D), erlaubt auch ...
for(int i = 0; i < max; i++)
{
...
}
... mit dem entscheidenen Vorteil, dass i "so lokal wie möglich ist" (siehe weiter oben unter "Prinzip der Lokalität"), nämlich nur innerhalb des Schleifen-Blocks. Wenn wirklich nur stumpf gezählt wird und die Zähl-Variable danach nicht mehr benötigt wird, sollte immer die For-Schleife den Vorzug bekommen. Zudem würd ich die for-Schleifen noch zum "einfachen Sprachumfang" zählen, da immer sehr einfach und praktisch immer (in der obigen Form) identisch implementiert. Wenn man sich dagegen mal die Regeln für switch/case-Anweisungen vermeintlich ähnlicher Sprachen anguckt ... --[[Spezial:Beiträge/92.196.53.40|92.196.53.40]] 21:51, 26. Mär. 2012 (CEST)
: Zustimmung zu deinen Bedenken. Es sind wohl die Randbedingungen zu beachten: Sofern dasselbe ''i'' vorher oder nachher benutzt wird, kann <tt>for</tt> durch eine der anderen Schleifen ersetzt werden. Du darfst Text und Gliederung gerne überarbeiten. -- [[Benutzer:Juetho|Jürgen]] 09:04, 27. Mär. 2012 (CEST)
:: Ich würd es eigentlich nur löschen wollen (was ich aber nicht tun werde). Die genannten Argumente überzeugen mich nicht und "... unter Umständen <small>[welchen?]</small> ... auschließlich ..." spricht auch nicht für eine eindeutigen Standpunkt des Autors. Wenn eine Sprache einen Zählschleifenkonstrukt mitbringt, sollte man es auch nutzen dürfen, denn es macht dem Quellcode-Leser deutlich, dass da nur gezählt wird (möglichst fixe Anzahl und Schrittweite) und nicht auf die Nichterfüllung einer while-Bedingung gewartet wird. --[[Spezial:Beiträge/92.196.30.97|92.196.30.97]] 21:20, 27. Mär. 2012 (CEST)
:::Ich bedanke mich für den wichtigen und richtigen Hinweis zur Lokalität und die Nichtlöschung des Abschnittes. Die Information habe ich mit einer weiteren Ergänzung in das Wikibook eingebaut. --[[Benutzer:Bautsch|Bautsch]] 08:39, 30. Mär. 2012 (CEST)
== Standard-Vorsilben und Bezeichner ==
Bei der Schreibweise von Bezeichnern und Methoden könnte man noch anfügen, dass bestimmte Standard-Vorsilben allgemein üblich sind. '''set'''Foo '''get'''Foo und andere wie '''is'''Foo '''my'''Foo '''del'''Foo '''copy'''Foo recht gebräuchlich. Der Bezug zum Objekt bleibt dadurch gewahrt. Ebenso kann man die Joker (Metasyntaktische Variablen) Foo, Bar, Bas, für den Quellcode erläutern. (z.B. am Beispiel von Parameterlisten). Weiterhin sollten gängige Zählvariablen erläutert werden. Das i und j meist für Iterationen gebraucht werden. --[[Benutzer:Mjchael|mjchael]] 13:57, 30. Mär. 2012 (CEST)
: my, del und copy ist mir noch nie untergekommen. Das dürfte auch zu sprachspezifisch werden (ist es teileweise schon jetzt, finde ich). Ab irgendeinem Punkt kann man nur noch auf die Styleguides der einzelnen Sprachen verweisen. --[[Spezial:Beiträge/92.196.71.109|92.196.71.109]] 17:07, 31. Mär. 2012 (CEST)
== Leerräume ==
"Leerräume, also zum Beispiel Leerzeichen, Zeilen- und Seitenumbrüche oder Tabulatoren, werden - genauso wie Kommentare - vom Compiler überlesen und dienen daher ausschließlich zur Verbesserung der Lesbarkeit für die Programmierer." Stimmt das wirklich immer? Zumindest für bestimmte Scriptsprachen trifft es nicht zu. In Python z.B. ist korrekte Einrückung absolut notwendig (siehe [[w:Python (Programmiersprache)#Strukturierung durch Einrücken]]). Ich würde hier zumindest einen entsprechenden Hinweis anbringen, dass es durchaus Ausnahmen geben kann. --[[Benutzer:Versat|Versat]] 09:36, 4. Dez. 2015 (CET)
: Zustimmung zu deinem Hinweis; bei Basic (vermutlich bei allen Dialekten) ist das Zeilenende (also ein einfacher Zeilenumbruch) die Markierung für den Abschluss einer Anweisung. Also ändere es passend. -- [[Benutzer:Juetho|Jürgen]] 10:03, 4. Dez. 2015 (CET)
: Danke für die Hinweise ! Ich stimme auch zu, denn auch bei FORTRAN mussten am Zeilenanfang bestimmte Einrückungen eingehalten werden, damit die Lochkarten korrekt gestanzt werden konnten. Ich hatte das verdrängt, und habe den Text jetzt entsprechend geändert. --[[Benutzer:Bautsch|Bautsch]] 16:19, 5. Dez. 2015 (CET)
== Beispiele Überladung des Divisionsoperators ==
Huhu, eine Frage wegen den Beispielen in diesem Abschnitt, laut Kommentar sind dort zwei Beispiele für Pascal, ist das nicht eher C, weil die Zuordnung der Werte in Pascal mit := erfolgen, oder? -- [[Benutzer:Zase Wieder|Zase Wieder]] 10:23, 28. Nov. 2023 (CET)
:Ich schätze es handelt sich hier lediglich um einen Flüchtigkeitsfehler. Kommentare und Syntaxhighlight sprechen für das Ziel Pascal. Könnte ja auch sein, dass es Zuweisungen aus dem Programmbeginn sein sollen. Nach der Projektbeschreibung (offensichtlicher Fehler) hab ich mal Doppelpunkte ergänzt. Für den Fall der Fälle: Ping@[[Benutzer:Bautsch|Bautsch]]. Viele Grüße, [[Benutzer:HirnSpuk|HirnSpuk]]<sup>[[Benutzer Diskussion:HirnSpuk|Disk]]</sup> – 15:39, 28. Nov. 2023 (CET)
::Ich danke Euch beiden, und habe mir auch noch erlaubt, "div" mit kleinen Buchstaben zu schreiben... :-) --[[Benutzer:Bautsch|Bautsch]] 16:50, 28. Nov. 2023 (CET)
:::ich danke auch, nur noch eine Kleinigkeit: die Zuweisungart des Typs ist mir nicht so bekannt, ist es nicht umgekehrt ''xxx: integer;'' statt ''int xxx;''und erfolgt diese Typenanweisung nicht „außerhalb“ in der Präambel. Auch scheinen leider unter der Literatur Ihre/Deine Beiträge nicht mehr bei ENISA aufrufbar zu sein, gibt es Alternativen (crises verbessert google zu crisis, ist letzteres gemeint?). Danke im Voraus und danke für die ganzen Kapitel hier auf de.wikibooks.org :). --grüße [[Benutzer:Zase Wieder|Zase Wieder]] 20:45, 12. Dez. 2023 (CET)
== Veraltetes im Kommentar zu Beginn ==
Derzeit im Buch: „Dazu gehören der Dateiname, der Modulname (respektive Klassenname) …“
Beides ist meines Wissens veraltet. Außerdem widerspricht beides dem DRY-Grundsatz („Wiederhole dich nicht.“). In Java müsste beispielsweise bei Änderung des Klassennamens sowohl der Dateiname als auch der Klassenname im Kommentar zu Beginn geändert werden. – [[Benutzer:Gebu|Gebu]] 10:23, 2. Jul. 2026 (CEST)
== Ist der Begriff „Prozeduren“ veraltet? ==
Derzeit im Buch: „… für Methoden (respektive für Prozeduren oder für Funktionen) …“.
Prozeduren gab es mal in der historischen Programmiersprache Pascal. Wird in aktuellen Programmiersprachen noch zwischen Prozedur und Funktion bzw. Methode unterschieden? – [[Benutzer:Gebu|Gebu]] 10:34, 2. Jul. 2026 (CEST)
== Minuszeichen im Beispiel in Component Pascal ==
Derzeit im Buch: „zahl-: LONGINT;“.
Ist hier das Minuszeichen falsch? – [[Benutzer:Gebu|Gebu]] 10:44, 2. Jul. 2026 (CEST)
== Zuweisungskompatibilität / Zeichenketten ==
Derzeit zu sehr auf die Programmiersprache C bezogen. Spätestens seit Java (seit 30 Jahren) überholt. – [[Benutzer:Gebu|Gebu]] 11:10, 2. Jul. 2026 (CEST)
hkehwacoil3x2gol3zr2s2r4bol4fa7
Vokabeltexte Chinesisch/ Vokabellektionen/ Lektion 629
0
101713
1088552
1013227
2026-07-02T10:22:33Z
Christian-bauer
6469
kleinere Ergänzungen und Korrekturen
1088552
wikitext
text/x-wiki
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 628|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 628|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 630|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 630}}
</noinclude>
== Zeichen ==
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻}} || luo2 || patroullieren, Logik, logische || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=逻}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |茵}} || yin1 || Matte, Matratze, Kissen, Polster || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=茵}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |眠}} || mian2 || Schlafenszeit, Schlafzimmer, Schläfrigkeit, Schlaf, schlafen || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=眠}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |践}} || jian4 || auf etwas treten, stampfen, betreten, Gang, ableisten, vollziehen, ausführen || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=践}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |障}} || zhang4 || abblocken, blockieren, aufhalten, behindern, versperren, Hindernis || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=障}} [[Datei:障-seal.svg|40px]]
|}
== Zusammengesetzte Wörter ==
=== 逻 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑}} || luo2 ji2 || Logik (Lehnwort) || (HSK 3.0 Band 5)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻各斯}} || luo2 ge4 si1 || Logos
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |非逻辑}} || fei1 luo2 ji5 || unlogisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑非}} || luo2 ji5 fei1 || Negation
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑或}} || luo2 ji2 huo4 || Disjunktion
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑语}} || luo2 ji5 yu3 || Lojban
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑图}} || luo2 ji2 tu2 || Funktionsplan
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑门}} || luo2 ji5 men2 || Logikgatter
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑性}} || luo2 ji5 xing4 || logisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |合逻辑}} || he2 luo2 ji2 || logisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑学}} || luo2 ji2 xue2 || Logik [ die Wissenschaft, das Fach ]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |认识逻辑}} || ren4 shi5 luo2 ji5 || Epistemische Logik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑论证}} || luo2 ji5 lun4 zheng4 || Argument, Argumentationstheorie
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |传统逻辑}} || chuan2 tong3 luo2 ji2 || Begriffslogik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |多值逻辑}} || duo1 zhi2 luo2 ji5 || Mehrwertige Logik
|-
| rowspan='2'| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑炸弹}} || luo2 ji2 zha2 dan4 || Logikbombe
|-
| luo2 ji2 zha4 dan4 || [Logikbombe]
|-
| rowspan='2'| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |数理逻辑}} || shu3 li3 luo2 ji5 || Mathematische Logik
|-
| shu4 li3 luo2 ji2 || [formale Logik]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |布尔逻辑}} || bu4 er3 luo2 ji5 || Bool'sche Logik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |时间逻辑}} || shi2 jian1 luo2 ji2 || Temporale Logik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |描述逻辑}} || miao2 shu4 luo2 ji5 || Beschreibungslogik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一阶逻辑}} || yi1 jie1 luo2 ji5 || Prädikatenlogik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |经典逻辑}} || jing1 dian3 luo2 ji5 || Klassische Logik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑电路}} || luo2 ji2 dian4 lu4 || logische Schaltung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑演算}} || luo2 ji5 yan3 suan4 || Applikation
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不合逻辑}} || bu4 he2 luo2 ji2 || Unehelichkeit, folgewidrig, unerheblich, unlogisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |具有逻辑}} || ju4 you3 luo2 ji5 || nüchtern
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |符合逻辑}} || fu2 he2 luo2 ji5 || logisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑映射}} || luo2 ji2 ying4 she4 || Logistische Gleichung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑等价}} || luo2 ji5 deng3 jia4 || Logische Äquivalenz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑编程}} || luo2 ji5 bian1 cheng2 || Logische Programmierung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |符号逻辑}} || fu2 hao4 luo2 ji2 || logistisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |高阶逻辑}} || gao1 jie1 luo2 ji5 || Logik höherer Stufe
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |命题逻辑}} || ming4 ti2 luo2 ji5 || Aussagenlogik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑组件}} || luo2 ji5 zu3 jian4 || Entscheidungselement
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |模糊逻辑}} || mo2 hu5 luo2 ji5 || Fuzzy-Logik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |模态逻辑}} || mo2 tai4 luo2 ji5 || Modallogik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑输出}} || luo2 ji2 shu1 chu1 || Ausgabe-Logik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑思维}} || luo2 ji5 si1 wei2 || logisches Denken
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑单元}} || luo2 ji2 dan1 yuan2 || Box
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |合符逻辑}} || he2 hu1 luo2 ji5 || logisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |形式逻辑}} || xing2 shi4 luo2 ji5 || Aussagenlogik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑运算符}} || luo2 ji5 yun4 suan4 fu2 || Boolescher Operator
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |数理逻辑学}} || shu3 li3 luo2 ji5 xue2 || semantisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |组合子逻辑}} || zu3 he2 zi3 luo2 ji5 || Kombinatorische Logik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑哲学论}} || luo2 ji5 zhe2 xue2 lun4 || Tractatus Logico-Philosophicus(Philos)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |组合逻辑电路}} || zu3 he2 luo2 ji5 dian4 lu4 || Schaltnetz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |接通逻辑电路}} || jie1 tong1 luo2 ji5 dian4 lu4 || Einschaltlogik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |算术逻辑部件}} || suan4 shu4 luo2 ji5 bu4 jian4 || ALU
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |算术逻辑单元}} || suan4 shu4 luo2 ji5 dan1 yuan2 || Arithmetisch-logische Einheit (engl: Arithmetic Logical Unit, ALU)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |逻辑实证主义}} || luo2 ji5 shi2 zheng4 zhu3 yi4 || Logischer Positivismus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |可程式逻辑阵列}} || ke3 cheng2 shi4 luo2 ji2 zhen4 lie4 || Programmierbare logische Anordnung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |可程式逻辑装置}} || ke3 cheng2 shi4 luo2 ji2 zhuang1 zhi4 || Programmierbare logische Schaltung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |晶体管晶体管逻辑}} || jing1 ti3 guan3 jing1 ti3 guan3 luo2 ji2 || Transistortransistorlogik
|}
=== 茵 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵}} || lai2 yin1 || Rhein
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |绿茵}} || lu:4 yin1 || grassy area
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |綠茵}} || lu:4 yin1 || (traditionelle Schreibweise von 绿茵), grassy area
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |张茵}} || zhang1 yin1 || Cheung Yan
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |張茵}} || zhang1 yin1 || (traditionelle Schreibweise von 张茵), Cheung Yan
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |北莱茵}} || bei3 lai2 yin1 || Nordrhein (Region in Deutschland)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵兰}} || lai2 yin1 lan2 || Rheinland (Region in Deutschland), Rheinprovinz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵河}} || lai2 yin1 he2 || Rhein (Fluss in Deutschland)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |绿茵场}} || lu:4 yin1 chang3 || football field
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |綠茵場}} || lu:4 yin1 chang3 || (traditionelle Schreibweise von 绿茵场), football field
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵联邦}} || lai2 yin1 lian2 bang1 || Rheinbund
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵美茵}} || lai2 yin1 mei3 yin1 || Rhein-Main-Gebiet
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵兰德}} || lai2 yin1 lan2 de2 || Rheinländer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵河谷}} || lai2 yin1 he2 gu3 || Rheintal
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵地区}} || lai2 yin1 di4 qu1 || Rheinland
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |下莱茵省}} || xia4 lai2 yin1 sheng3 || Bas-Rhin (Departement in Frankreich)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵金属}} || lai2 yin1 jin1 shu3 || Rheinmetall, Rheinmetall
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |上莱茵省}} || shang4 lai2 yin1 sheng3 || Haut-Rhin (Departement in Frankreich)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |艾茵兰德}} || ai4 yin1 lan2 de2 || Ayn Rand
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵交际舞}} || lai2 yin1 jiao1 ji4 wu3 || Rheinländer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵的黄金}} || lai2 yin1 de5 huang2 jin1 || Das Rheingold
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |普茵斯丹号}} || pu3 yin1 si1 dan1 hao4 || MS Prinsendam (Kreuzfahrtschiff)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |普茵斯丹號}} || pu3 yin1 si1 dan1 hao4 || (traditionelle Schreibweise von 普茵斯丹号), MS Prinsendam (Kreuzfahrtschiff)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵河地区}} || lai2 yin1 he2 di4 qu1 || rheinisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵美茵区}} || lai2 yin1 mei3 yin1 qu1 || Rhein-Main-Gebiet
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵经济学院}} || lai2 yin1 jing1 ji4 xue2 yuan4 || Rheinische Wirtschaftsakademie
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵能源球场}} || lai2 yin1 neng2 yuan2 qiu2 chang3 || RheinEnergieStadion
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵地区的居民}} || lai2 yin1 di4 qu1 de5 ju1 min2 || Rheinländer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |罗伯特海因莱茵}} || luo2 bo2 te4 hai3 yin1 lai2 yin1 || Robert A. Heinlein
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |北莱茵威斯特法论州}} || bei3 lai2 yin1 wei1 si1 te4 fa3 lun4 zhou1 || Nordrhein-Westfalen, NRW
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |北莱茵威斯特法伦州}} || bei3 lai2 yin1 wei1 si1 te4 fa3 lun2 zhou1 || Nordrhein-Westfalen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵威斯特伐利亚发电集团}} || lai2 yin1 wei1 si1 te4 fa2 li4 ya4 fa1 dian4 ji2 tuan2 || REW
|}
=== 眠 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |失眠}} || shi1 mian2 || Insomnie, Schlaflosigkeit, unter Schlaflosigkeit leiden || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |亚眠}} || ya4 mian2 || Amiens
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |亞眠}} || ya4 mian2 || (traditionelle Schreibweise von 亚眠), Amiens
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冬眠}} || dong1 mian2 || Winterschlaf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |安眠}} || an1 mian2 || friedlich schlafen, sanft ruhen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |入眠}} || ru4 mian2 || einschlafen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不眠}} || bu4 mian2 || schlaflos
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |休眠}} || xiu1 mian2 || Ruhezustand || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠}} || shui4 mian2 || Schlaf, schlafen || (HSK 3.0 Band 5)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠者}} || shui4 mian2 zhe3 || Schlafcouch, Schlafsofa
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |安眠药}} || an1 mian2 yao4 || Schlafmittel, Hypnotikum || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |安眠藥}} || an1 mian2 yao4 || (traditionelle Schreibweise von 安眠药), Schlafmittel, Hypnotikum
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |休眠状态}} || xiu1 mian2 zhuang4 tai4 || Schlaf, Ruhezustand
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |亚眠和约}} || ya4 mian2 he2 yue1 || Friede von Amiens
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |亞眠和約}} || ya4 mian2 he2 yue1 || (traditionelle Schreibweise von 亚眠和约), Friede von Amiens
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠失调}} || shui4 mian2 shi1 diao4 || Schlafstörung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |安眠药片}} || an1 mian2 yao4 pian4 || Schlaftablette
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |安眠藥片}} || an1 mian2 yao4 pian4 || (traditionelle Schreibweise von 安眠药片), Schlaftablette
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |失眠患者}} || shi1 mian2 huan4 zhe3 || Person, die an Schlaflosigkeit leidet, schlafloser Patient
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠状态}} || shui4 mian2 zhuang4 tai4 || ruhend
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |轻度安眠药}} || qing1 du4 an1 mian2 yao4 || leichtes Schlafmittel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |輕度安眠藥}} || qing1 du4 an1 mian2 yao4 || (traditionelle Schreibweise von 轻度安眠药), leichtes Schlafmittel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠之精灵}} || shui4 mian2 zhi1 jing1 ling2 || Sandmann
|}
=== 践 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |勾践}} || gou1 jian4 || King Gou Jian of Yue
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |实践}} || shi2 jian4 || Ausübung, Praktik, Praktikum, Praxis, praktizieren, ausführen || (HSK 3.0 Band 6)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |践约}} || jian4 yue1 || to keep a promise, to honor an agreement
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |作践}} || zuo4 jian4 || to ill-use, to humiliate, to degrade, to ruin, also pr. [zuo2 jian4]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |践行}} || jian4 xing2 || to practice, to put into practice
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |糟践}} || zao1 jian5 || to waste, to spoil, to destroy, to insult grievously
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |实践家}} || shi2 jian4 jia1 || Praktiker
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |在实践中}} || zai4 shi2 jian4 zhong1 || beim Anwenden, beim Nutzen, praktisch, in der Praxis, in der Anwendung, während der Praxis, während der Awendung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |临床实践}} || lin2 chuang2 shi2 jian4 || klinische Praxis
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |付诸实践}} || fu4 zhu1 shi2 jian4 || in die Praxis umsetzen, verwirklichen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |国家实践}} || guo2 jia1 shi2 jian4 || Staatenpraxis (Völkerrecht)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |实践证明}} || shi2 jian4 zheng4 ming2 || die Praxis beweist
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |实践经验}} || shi2 jian4 jing1 yan4 || praktische Erfahrung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |面向实践}} || mian4 xiang4 shi2 jian4 || praxisorientiert
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |最佳实践}} || zui4 jia1 shi2 jian4 || Best Practice
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |越王勾践}} || Yue4 Wang2 Gou1 Jian4 || King Gou Jian of Yue (c. 470 BC), sometimes considered one of the Five Hegemons 春秋五霸
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |经过实践的}} || jing1 guo4 shi2 jian4 de5 || erprobt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |理论与实践}} || li3 lun4 yu3 shi2 jian4 || Theorie und Praxis
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |实践理性批判}} || shi2 jian4 li3 xing4 pi1 pan4 || Kritik der praktischen Vernunft
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |理论和实践的密切关系}} || li3 lun4 he2 shi2 jian4 de5 mi4 qie1 guan1 xi4 || die enge Beziehung zwischen Theorie und Praxis
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |实践是检验真理的唯一标准}} || shi2 jian4 shi4 jian3 yan4 zhen1 li3 de5 wei2 yi1 biao1 zhun3 || Die Praxis ist das einzige Kriterium der Wahrheit.
|}
=== 障 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |残障}} || can2 zhang4 || behindert
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |屏障}} || ping2 zhang4 || Unterstand, Schutzwand
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |保障}} || bao3 zhang4 || sichern, gewährleisten || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |路障}} || lu4 zhang4 || Barrikade, Sperre, Sperrung, Wagenburg, sperren
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |障害}} || zhang4 hai4 || Braunfäule
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |音障}} || yin1 zhang4 || Schallmauer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障}} || gu4 zhang4 || Defekt, Havarie, Störung || (HSK 3.0 Band 6)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |残障者}} || can2 zhang4 zhe3 || Versehrte, Versehrter, Verkrüppelte, Verkrüppelter
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |障眼法}} || zhang4 yan3 fa3 || Ablenkungsmanöver
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |有故障}} || you3 gu4 zhang4 || fehlerhaft
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |有残障}} || you3 can2 zhang4 || gelähmt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |有保障}} || you3 bao3 zhang4 || währen, garantiert
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |黑内障}} || hei1 nei4 zhang4 || Amaurose, totale Erblindung, Schwarzer Star
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |黑內障}} || hei1 nei4 zhang4 || (traditionelle Schreibweise von 黑内障), Amaurose, totale Erblindung, Schwarzer Star
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |白内障}} || bai2 nei4 zhang4 || grauer Star, Katarakt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |白內障}} || bai2 nei4 zhang4 || (traditionelle Schreibweise von 白内障), grauer Star, Katarakt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障树}} || gu4 zhang4 shu4 || Fehlerbaum
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障樹}} || gu4 zhang4 shu4 || (traditionelle Schreibweise von 故障树), Fehlerbaum
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |主故障}} || zhu3 gu4 zhang4 || Masterfehler
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |从故障}} || cong2 gu4 zhang4 || Slavefehler
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |從故障}} || cong2 gu4 zhang4 || (traditionelle Schreibweise von 从故障), Slavefehler
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |障蔽效应}} || zhang4 bi4 xiao4 ying4 || Stau
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |障蔽效應}} || zhang4 bi4 xiao4 ying4 || (traditionelle Schreibweise von 障蔽效应), Stau
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |印刷故障}} || yin4 shua1 gu4 zhang4 || Druckschwierigkeiten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障事故}} || gu4 zhang4 shi4 gu4 || Panne, technische Störung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |电力故障}} || dian4 li4 gu4 zhang4 || Stromausfall
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |電力故障}} || dian4 li4 gu4 zhang4 || (traditionelle Schreibweise von 电力故障), Stromausfall
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障信号}} || gu4 zhang4 xin4 hao4 || Fehlermeldung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障信號}} || gu4 zhang4 xin4 hao4 || (traditionelle Schreibweise von 故障信号), Fehlermeldung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障号码}} || gu4 zhang4 hao4 ma3 || Fehlernummer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障號碼}} || gu4 zhang4 hao4 ma3 || (traditionelle Schreibweise von 故障号码), Fehlernummer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社会保障}} || she4 hui4 bao3 zhang4 || soziale Sicherung, Sozialversicherung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社會保障}} || she4 hui4 bao3 zhang4 || (traditionelle Schreibweise von 社会保障), soziale Sicherung, Sozialversicherung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |得到保障}} || de2 dao4 bao3 zhang4 || gewährleisten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |设下屏障}} || she4 xia4 ping2 zhang4 || riegeln
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |机器故障}} || ji1 qi4 gu4 zhang4 || Maschinenausfall, Maschinenschaden
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |機器故障}} || ji1 qi4 gu4 zhang4 || (traditionelle Schreibweise von 机器故障), Maschinenausfall, Maschinenschaden
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障排除}} || gu4 zhang4 pai2 chu2 || Störungsbeseitigung, Störungsbehebung, Schadensbehebung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |保障监督}} || bao3 zhang4 jian1 du1 || Sicherheitsklauseln
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |保障条款}} || bao3 zhang4 tiao2 kuan3 || Schutzklausel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |保障條款}} || bao3 zhang4 tiao2 kuan3 || (traditionelle Schreibweise von 保障条款), Schutzklausel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |总线故障}} || zong3 xian4 gu4 zhang4 || Busfehler
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障检查}} || gu4 zhang4 jian3 cha2 || Störungsüberwachung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |机械故障}} || ji1 xie4 gu4 zhang4 || Fehlfunktion der Maschine, Maschinenfehlfunktion, technische Störung, technischer Defekt, technischer Fehler
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |機械故障}} || ji1 xie4 gu4 zhang4 || (traditionelle Schreibweise von 机械故障), Fehlfunktion der Maschine, Maschinenfehlfunktion, technische Störung, technischer Defekt, technischer Fehler
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |质量保障}} || zhi2 liang4 bao3 zhang4 || Qualitätssicherung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |身体障害}} || shen1 ti3 zhang4 hai4 || Krüppel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |身體障害}} || shen1 ti3 zhang4 hai4 || (traditionelle Schreibweise von 身体障害), Krüppel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障状态}} || gu4 zhang4 zhuang4 tai4 || Notbetrieb
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |健康保障}} || jian4 kang1 bao3 zhang4 || Gesundheitsversorgung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |保障人权}} || bao3 zhang4 ren2 quan2 || die Menschenrechte garantieren, die Menschenrechte gewährleisten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |就业保障}} || jiu4 ye4 bao3 zhang4 || Arbeitsplatzsicherheit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障监视}} || gu4 zhang4 jian1 shi4 || Störungsüberwachung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一叶障目}} || yi1 ye4 zhang4 mu4 || wegen Kleinigkeiten das große Wichtige nicht erkennen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一葉障目}} || yi1 ye4 zhang4 mu4 || (traditionelle Schreibweise von 一叶障目), wegen Kleinigkeiten das große Wichtige nicht erkennen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |发生故障}} || fa1 sheng1 gu4 zhang4 || Störung ist aufgetreten, Fehlfunktion ist aufgetreten, etw. ist ausgefallen, etw. ist defekt(Adv, Tech)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |發生故障}} || fa1 sheng1 gu4 zhang4 || (traditionelle Schreibweise von 发生故障), Störung ist aufgetreten, Fehlfunktion ist aufgetreten, etw. ist ausgefallen, etw. ist defekt(Adv, Tech)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |常见故障}} || chang2 jian4 gu4 zhang4 || häufig auftretende Probleme (Störungen)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |常見故障}} || chang2 jian4 gu4 zhang4 || (traditionelle Schreibweise von 常见故障), häufig auftretende Probleme (Störungen)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |故障系列}} || gu4 zhang4 xi4 lie4 || Pannenserie
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |排除故障}} || pai2 chu2 gu4 zhang4 || Störung beheben, Defekt beheben, Fehler beseitigen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |相位故障}} || xiang1 wei4 gu4 zhang4 || Phasenausfall
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |发电站故障}} || fa1 dian4 zhan4 gu4 zhang4 || Kraftwerkspanne
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |發電站故障}} || fa1 dian4 zhan4 gu4 zhang4 || (traditionelle Schreibweise von 发电站故障), Kraftwerkspanne
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |打印机故障}} || da3 yin4 ji1 gu4 zhang4 || Druckerfehler
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |打印機故障}} || da3 yin4 ji1 gu4 zhang4 || (traditionelle Schreibweise von 打印机故障), Druckerfehler
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社会保障制度}} || she4 hui4 bao3 zhang4 zhi4 du4 || System der sozialen Sicherung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社會保障制度}} || she4 hui4 bao3 zhang4 zhi4 du4 || (traditionelle Schreibweise von 社会保障制度), System der sozialen Sicherung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社会保障法典}} || she4 hui4 bao3 zhang4 fa3 dian3 || Sozialgesetzbuch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社會保障法典}} || she4 hui4 bao3 zhang4 fa3 dian3 || (traditionelle Schreibweise von 社会保障法典), Sozialgesetzbuch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |出条部位故障}} || chu1 tiao2 bu4 wei4 gu4 zhang4 || Störungen Ausgang
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |出條部位故障}} || chu1 tiao2 bu4 wei4 gu4 zhang4 || (traditionelle Schreibweise von 出条部位故障), Störungen Ausgang
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |外部故障成本}} || wai4 bu4 gu4 zhang4 cheng2 ben3 || externe Fehlerkosten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社会保障体系}} || she4 hui4 bao3 zhang4 ti3 xi4 || System der sozialen Sicherung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社會保障體系}} || she4 hui4 bao3 zhang4 ti3 xi4 || (traditionelle Schreibweise von 社会保障体系), System der sozialen Sicherung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |最低生活保障}} || zui4 di1 sheng1 huo2 bao3 zhang4 || Unterhaltsbeihilfe, Unterhaltszahlung, Unterhaltszuschuss
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |质量保障体系}} || zhi2 liang4 bao3 zhang4 ti3 xi4 || Qualitätssicherungssystem
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |法律保护之保障}} || fa3 lü4 bao3 hu4 zhi1 bao3 zhang4 || Rechtsschutzgarantie
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社会福利保障制度}} || she4 hui4 fu2 li4 bao3 zhang4 zhi4 du4 || System der sozialen Sicherheit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社會福利保障制度}} || she4 hui4 fu2 li4 bao3 zhang4 zhi4 du4 || (traditionelle Schreibweise von 社会福利保障制度), System der sozialen Sicherheit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |国际社会保障协会}} || guo2 ji4 she4 hui4 bao3 zhang4 xie2 hui4 || Internationale Vereinigung für Soziale Sicherheit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |最低生活保障制度}} || zui4 di1 sheng1 huo2 bao3 zhang4 zhi4 du4 || Absicherungssystem des Existenzminimums
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |劳动和社会保障部}} || lao2 dong4 he2 she4 hui4 bao3 zhang4 bu4 || Ministerium für Arbeit und Soziales
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社会福利与保障事业}} || she4 hui4 fu2 li4 yu3 bao3 zhang4 shi4 ye4 || Sozialwesen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社会福利保障的全面措施}} || she4 hui4 fu2 li4 bao3 zhang4 de5 quan2 mian4 cuo4 shi1 || umfassendes Netz der sozialen Sicherheit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社會福利保障的全面措施}} || she4 hui4 fu2 li4 bao3 zhang4 de5 quan2 mian4 cuo4 shi1 || (traditionelle Schreibweise von 社会福利保障的全面措施), umfassendes Netz der sozialen Sicherheit
|}
== Sätze ==
=== 逻 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你说的话在逻辑上有问题。}} || ni3 shuo1 de5 hua4 zai4 luo2 ji2 shang4 you3 wen4 ti2 。|| What you're saying isn't logical. (Mandarin, [https://tatoeba.org/eng/sentences/show/792464 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/CM CM])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你不懂基本逻辑吗?}} || ni3 bu4 dong3 ji1 ben3 luo2 ji2 ma5 ?|| Verstehst du nicht mal einfachste Logik? (Mandarin, [https://tatoeba.org/eng/sentences/show/6563555 Tatoeba] [https://tatoeba.org/eng/user/profile/gumblex gumblex] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不正确的命题听起来可能符合逻辑。}} || bu4 zheng4 que4 de5 ming4 ti2 ting1 qi3 lai2 ke3/ke4 neng2 fu2 he2 luo2 ji2 。|| An argument may be logically sound without being true. (Mandarin, [https://tatoeba.org/eng/sentences/show/5715191 Tatoeba] [https://tatoeba.org/eng/user/profile/verdastelo9604 verdastelo9604] [https://tatoeba.org/eng/user/profile/darinmex darinmex])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我跟不上你的逻辑。}} || wo3 gen1 bu4 shang4 ni3 de5 luo2 ji2 。|| Ich kann eurer Logik nicht folgen. Ich kann deiner Logik nicht folgen. (Mandarin, [https://tatoeba.org/eng/sentences/show/4760161 Tatoeba] [https://tatoeba.org/eng/user/profile/ryanwoo ryanwoo] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我无法理解他的逻辑。}} || wo3 wu2 fa3 li3 jie3 ta1 de5 luo2 ji2 。|| I can't follow his logic. (Mandarin, [https://tatoeba.org/eng/sentences/show/7068905 Tatoeba] [https://tatoeba.org/eng/user/profile/la_kanro la_kanro] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那符合逻辑。}} || na4/nei4 fu2 he2 luo2 ji2 。|| Das ist logisch. (Mandarin, [https://tatoeba.org/eng/sentences/show/7068906 Tatoeba] [https://tatoeba.org/eng/user/profile/la_kanro la_kanro] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |数学就像物理的逻辑一样。}} || shu3/shuo4 xue2 jiu4 xiang4 wu4 li3 de5 luo2 ji2 yi1 yang4 。|| Die Mathematik ist wie die Logik der Physik. (Mandarin, [https://tatoeba.org/eng/sentences/show/502736 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |质数就像人生,它们完全是合逻辑的,但就算你花多少时间来思考,也不能找到它们背后的规律。}} || zhi4 shu3/shuo4 jiu4 xiang4 ren2 sheng1 , ta1/tuo2 men5 wan2 quan2 shi4 he2 luo2 ji2 de5 , dan4 jiu4 suan4 ni3 hua1 duo1 shao3 shi2 jian1 lai2 si1 kao3 , ye3 bu4 neng2 zhao3 dao4 ta1/tuo2 men5 bei1/bei4 hou4 de5 gui1 lü4 。|| Primzahlen sind wie das Leben, sie sind völlig logisch, aber es ist unmöglich, Regeln für sie zu finden, selbst wenn man seine ganze Zeit dem Nachdenken darüber widmet. (Mandarin, [https://tatoeba.org/eng/sentences/show/486264 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我跟不上汤姆的逻辑。}} || wo3 gen1 bu4 shang4 tang1 mu3 de5 luo2 ji2 。|| Ich kann Toms Logik nicht folgen. (Mandarin, [https://tatoeba.org/eng/sentences/show/8739482 Tatoeba] [https://tatoeba.org/eng/user/profile/crescat crescat] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |最合逻辑的放鞋处是门口附近。}} || zui4 he2 luo2 ji2 de5 fang4 xie2 chu4 shi4 men2 kou3 附 jin4 。|| Es ist das Logischste, seine Schuhe nahe der Tür abzustellen. (Mandarin, [https://tatoeba.org/eng/sentences/show/6105187 Tatoeba] [https://tatoeba.org/eng/user/profile/verdastelo9604 verdastelo9604] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我找不到任何英文拼写的逻辑。"T-O-G-H"可以被发音成"fish"。}} || wo3 zhao3 bu4 dao4 ren4 he2 ying1 wen2 pin1 xie3 de5 luo2 ji2 。"T-O-G-H" ke3/ke4 yi3 bei4 fa1 yin1 cheng2 "fish"。|| I can't find any logic to English spelling. “Ghoti” can be pronounced as “fish.” (Mandarin, [https://tatoeba.org/eng/sentences/show/793341 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Objectivesea Objectivesea])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那不合逻辑。}} || na4/nei4 bu4 he2 luo2 ji2 。|| Das macht keinen Sinn. (Mandarin, [https://tatoeba.org/eng/sentences/show/10308993 Tatoeba] [https://tatoeba.org/eng/user/profile/DaoSeng DaoSeng] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |知识分子只需要世界语和逻辑语。}} || zhi1 zhi4 fen1 zi5 zhi3 xu1 yao4 shi4 jie4 yu3 he2/he4/huo2 luo2 ji2 yu3 。|| Intellektuelle brauchen nur Esperanto und Lojban. (Mandarin, [https://tatoeba.org/eng/sentences/show/8868746 Tatoeba] [https://tatoeba.org/eng/user/profile/nonong nonong])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |质数就像生活,它们是完全符合逻辑的,但即使我们花所有时间来思考,也找不到规律。}} || zhi4 shu3/shuo4 jiu4 xiang4 sheng1 huo2 , ta1/tuo2 men5 shi4 wan2 quan2 fu2 he2 luo2 ji2 de5 , dan4 ji2 shi3/shi4 wo3 men5 hua1 suo3 you3 shi2 jian1 lai2 si1 kao3 , ye3 zhao3 bu4 dao4 gui1 lü4 。|| Primzahlen sind wie das Leben, sie sind völlig logisch, aber es ist unmöglich, Regeln für sie zu finden, selbst wenn man seine ganze Zeit dem Nachdenken darüber widmet. (Mandarin, [https://tatoeba.org/eng/sentences/show/502784 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|}
=== 茵 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵河是分隔法国和德国的界线。}} || lai2 yin1 he2 shi4 fen1 ge2 fa3 guo2 he2/he4/huo2 de2 guo2 de5 jie4 xian4 。|| Der Rhein ist die Grenze, die Frankreich und Deutschland trennt. (Mandarin, [https://tatoeba.org/eng/sentences/show/389394 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵河流经法国和德国国界。}} || lai2 yin1 he2 liu2 jing4 fa3 guo2 he2/he4/huo2 de2 guo2 guo2 jie4 。|| Der Rhein fließt zwischen Frankreich und Deutschland. (Mandarin, [https://tatoeba.org/eng/sentences/show/751683 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|}
=== 眠 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孩子們需要大量的睡眠。}} || hai2 zi5 men5 xu1 yao4 da4 liang2/liang4 de5 shui4 mian2 。|| Kinder brauchen viel Schlaf. (Mandarin, [https://tatoeba.org/eng/sentences/show/793508 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Wolf Wolf])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你需要多少小时的睡眠?}} || ni3 xu1 yao4 duo1 shao3 xiao3 shi2 de5 shui4 mian2 ?|| Wie viele Stunden Schlaf brauchst du? (Mandarin, [https://tatoeba.org/eng/sentences/show/414627 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我们常常把死亡比作睡眠。}} || wo3 men5 chang2 chang2 ba3 si3 wang2 bi4 zuo4 shui4 mian2 。|| Death is often compared to sleep. (Mandarin, [https://tatoeba.org/eng/sentences/show/1324909 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |小李经常失眠,因为他的邻居老是大声地吵架。}} || xiao3 li3 jing4 chang2 shi1 mian2 , yin1 wei2/wei4 ta1 de5 lin2 ju1 lao3 shi4 da4 sheng1 de4/di4 chao3 jia4 。|| Xiaoli often loses sleep because his neighbours are always arguing loudly. (Mandarin, [https://tatoeba.org/eng/sentences/show/789133 Tatoeba] [https://tatoeba.org/eng/user/profile/egg0073 egg0073] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孩子需要很多睡眠。}} || hai2 zi5 xu1 yao4 hen3 duo1 shui4 mian2 。|| Kinder brauchen viel Schlaf. Die Kinder müssen mehr schlafen. (Mandarin, [https://tatoeba.org/eng/sentences/show/358180 Tatoeba] [https://tatoeba.org/eng/user/profile/rmgao rmgao] [https://tatoeba.org/eng/user/profile/Wolf Wolf] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我們常常把死亡比作睡眠。}} || wo3 men5 chang2 chang2 ba3 si3 wang2 bi4 zuo4 shui4 mian2 。|| Death is often compared to sleep. (Mandarin, [https://tatoeba.org/eng/sentences/show/1324909 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孩子们需要大量的睡眠。}} || hai2 zi5 men5 xu1 yao4 da4 liang2/liang4 de5 shui4 mian2 。|| Kinder brauchen viel Schlaf. (Mandarin, [https://tatoeba.org/eng/sentences/show/793508 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Wolf Wolf])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你有足够到睡眠吗?}} || ni3 you3 zu3 gou4 dao4 shui4 mian2 ma5 ?|| Hast du genug Schlaf bekommen? (Mandarin, [https://tatoeba.org/eng/sentences/show/2411830 Tatoeba] [https://tatoeba.org/eng/user/profile/xujie8410 xujie8410] [https://tatoeba.org/eng/user/profile/Wolf Wolf])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一夜好眠让他恢复了活力。}} || yi1 ye4 hao3 mian2 rang4 ta1 hui1 fu4 le5 huo2 li4 。|| Nachdem er einmal ordentlich durchgeschlafen hatte, ging es ihm wieder blendend. (Mandarin, [https://tatoeba.org/eng/sentences/show/8936374 Tatoeba] [https://tatoeba.org/eng/user/profile/crescat crescat] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |小孩需要很多睡眠}} || xiao3 hai2 xu1 yao4 hen3 duo1 shui4 mian2 || Kinder brauchen viel Schlaf. (Mandarin, [https://tatoeba.org/eng/sentences/show/2411824 Tatoeba] [https://tatoeba.org/eng/user/profile/xujie8410 xujie8410] [https://tatoeba.org/eng/user/profile/Wolf Wolf])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |史密斯花了多年研究睡眠和缺乏睡眠对记忆和学习的影响。}} || shi3 mi4 si1 hua1 le5 duo1 nian2 yan2 jiu1 shui4 mian2 he2/he4/huo2 que1 乏 shui4 mian2 dui4 ji4 yi4 he2/he4/huo2 xue2 xi2 de5 ying3 xiang3 。|| Smith hat jahrelang die Auswirkungen von Schlaf und Schlafmangel auf das Gedächtnis und das Lernen untersucht. (Mandarin, [https://tatoeba.org/eng/sentences/show/503186 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她在睡眠中安详地去世了。}} || ta1 zai4 shui4 mian2 zhong1/zhong4 an1 详 de4/di4 qu4 shi4 le5 。|| Sie starb friedlich im Schlaf. (Mandarin, [https://tatoeba.org/eng/sentences/show/334598 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/freddy1 freddy1])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他昨晚都在工作,彻夜未眠。}} || ta1 zuo2 wan3 dou1/du1 zai4 gong1 zuo4 ,彻 ye4 wei4 mian2 。|| Die letzte Nacht arbeitete er pausenlos durch. (Mandarin, [https://tatoeba.org/eng/sentences/show/8589135 Tatoeba] [https://tatoeba.org/eng/user/profile/easononizuka easononizuka] [https://tatoeba.org/eng/user/profile/Tamy Tamy])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠是最大个贼骨头,伊偷了阿拉一半个生命。}} || shui4 mian2 shi4 zui4 da4 ge4 zei2 gu3 tou2 , yi1 tou1 le5 a1 la1 yi1 ban4 ge4 sheng1 ming4 。|| Der Schlaf ist der größte Dieb. Er stiehlt uns die Hälfte unseres Lebens. (Shanghai, [https://tatoeba.org/eng/sentences/show/488193 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |每一天都是一生;每一次起床醒来都是次微小的新生,每个清新的早晨都带着点青春,每次歇息和睡眠都是次小小的死亡。}} || mei3 yi1 tian1 dou1/du1 shi4 yi1 sheng1 ; mei3 yi1 ci4 qi3 chuang2 xing3 lai2 dou1/du1 shi4 ci4 wei2 xiao3 de5 xin1 sheng1 , mei3 ge4 qing1 xin1 de5 zao3 chen2 dou1/du1 dai4 zhao2/zhe2 dian3 qing1 chun1 , mei3 ci4 xie1 xi1 he2/he4/huo2 shui4 mian2 dou1/du1 shi4 ci4 xiao3 xiao3 de5 si3 wang2 。|| Jeder Tag ist ein kleines Leben; jedes Erwachen und Aufstehen eine kleine Geburt, jeder frische Morgen eine kleine Jugend, und jedes Zubettgehen und Einschlafen ein kleiner Tod. (Mandarin, [https://tatoeba.org/eng/sentences/show/9963212 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/Adelpa Adelpa])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠不足增加心臟病發作的危險。}} || shui4 mian2 bu4 zu3 zeng1 jia1 xin1 zang1 bing4 fa1 zuo4 de5 wei1 xian3 。|| Sleep deprivation increases risk of heart attacks. (Mandarin, [https://tatoeba.org/eng/sentences/show/797071 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我昨晚失眠了。}} || wo3 zuo2 wan3 shi1 mian2 le5 。|| Ich konnte letzte Nacht nicht schlafen. (Mandarin, [https://tatoeba.org/eng/sentences/show/353520 Tatoeba] [https://tatoeba.org/eng/user/profile/ruicong ruicong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠不足增加心臟病发作的危险。}} || shui4 mian2 bu4 zu3 zeng1 jia1 xin1 zang1 bing4 fa1 zuo4 de5 wei1 xian3 。|| Sleep deprivation increases risk of heart attacks. (Mandarin, [https://tatoeba.org/eng/sentences/show/797071 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我已兩夜無眠。}} || wo3 yi3 liang3 ye4 wu2 mian2 。|| Ich habe schon seit zwei Nächten nicht mehr geschlafen. (Mandarin, [https://tatoeba.org/eng/sentences/show/10266776 Tatoeba] [https://tatoeba.org/eng/user/profile/DaoSeng DaoSeng] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠是最大的小偷,它偷了我们一半的生命。}} || shui4 mian2 shi4 zui4 da4 de5 xiao3 tou1 , ta1/tuo2 tou1 le5 wo3 men5 yi1 ban4 de5 sheng1 ming4 。|| Der Schlaf ist der größte Dieb. Er stiehlt uns die Hälfte unseres Lebens. (Mandarin, [https://tatoeba.org/eng/sentences/show/332750 Tatoeba] [https://tatoeba.org/eng/user/profile/popolady popolady] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我最近一直睡眠不足。}} || wo3 zui4 jin4 yi1 zhi2 shui4 mian2 bu4 zu3 。|| In letzter Zeit leide ich unter Schlafmangel. (Mandarin, [https://tatoeba.org/eng/sentences/show/889606 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠时间的长短可因人而异。}} || shui4 mian2 shi2 jian1 de5 chang2/zhang3 duan3 ke3/ke4 yin1 ren2 er2 yi4 。|| The amount of time spent asleep can vary from person to person. (Mandarin, [https://tatoeba.org/eng/sentences/show/1164921 Tatoeba] [https://tatoeba.org/eng/user/profile/sysko sysko] [https://tatoeba.org/eng/user/profile/SHamp SHamp])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我睡眠不足。}} || wo3 shui4 mian2 bu4 zu3 。|| I'm not getting enough sleep. (Mandarin, [https://tatoeba.org/eng/sentences/show/6583879 Tatoeba] [https://tatoeba.org/eng/user/profile/verdastelo9604 verdastelo9604] [https://tatoeba.org/eng/user/profile/Eccles17 Eccles17])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |累的时候睡眠是最好的药品。}} || lei2/lei3/lei4 de5 shi2 hou4 shui4 mian2 shi4 zui4 hao3 de5 yao4 pin3 。|| Wenn man erschöpft ist, ist Schlaf die beste Medizin. (Mandarin, [https://tatoeba.org/eng/sentences/show/3380569 Tatoeba] [https://tatoeba.org/eng/user/profile/go_oo go_oo] [https://tatoeba.org/eng/user/profile/freddy1 freddy1])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我已两夜无眠。}} || wo3 yi3 liang3 ye4 wu2 mian2 。|| Ich habe schon seit zwei Nächten nicht mehr geschlafen. (Mandarin, [https://tatoeba.org/eng/sentences/show/10266776 Tatoeba] [https://tatoeba.org/eng/user/profile/DaoSeng DaoSeng] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|}
=== 践 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |实践和理论同样重要,但我们倾向于重视后者而忽略前者。}} || shi2 jian4 he2/he4/huo2 li3 lun4 tong2 yang4 chong2/zhong4 yao4 , dan4 wo3 men5 qing1 xiang4 yu2 chong2/zhong4 shi4 hou4 zhe3 er2 hu1 lüe4 qian2 zhe3 。|| Praxis ist ebenso wichtig wie Theorie, aber wir tendieren dazu, letztere zu überhöhen und erstere zu übersehen. (Mandarin, [https://tatoeba.org/eng/sentences/show/345973 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |实践出真知。}} || shi2 jian4 chu1 zhen1 zhi1 。|| Erfahrung macht gewitzt. (Mandarin, [https://tatoeba.org/eng/sentences/show/1750390 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我们怎样才能将其付出实践?}} || wo3 men5 zen3 yang4 cai2 neng2 jiang1/jiang4 qi2 fu4 chu1 shi2 jian4 ?|| Wie können wir es praktisch umsetzen? (Mandarin, [https://tatoeba.org/eng/sentences/show/10007005 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/samueldora samueldora])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她作为一个喜欢动手实践的人常常把朋友的汽车修好。}} || ta1 zuo4 wei2/wei4 yi1 ge4 xi3 欢 dong4 shou3 shi2 jian4 de5 ren2 chang2 chang2 ba3 peng2 you3 de5 qi4 che1 xiu1 hao3 。|| As she's a very practical person, she often fixes her friends' cars. (Mandarin, [https://tatoeba.org/eng/sentences/show/788984 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |理论上说,理论和实践没有区别。但实践上说,是有的。}} || li3 lun4 shang4 shuo1 , li3 lun4 he2/he4/huo2 shi2 jian4 mei2/mo4 you3 qu1 bie2 。 dan4 shi2 jian4 shang4 shuo1 , shi4 you3 de5 。|| Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied, sehr wohl jedoch in der Praxis. In der Theorie gibt es keinen Unterschied zwischen Theorie und Praxis. Aber in der Praxis gibt es einen. (Mandarin, [https://tatoeba.org/eng/sentences/show/389790 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/deLeeuw deLeeuw] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |理论必须与实践相随。}} || li3 lun4 bi4 xu1 yu3 shi2 jian4 xiang1/xiang4 sui2 。|| A theory must be followed by practice. (Mandarin, [https://tatoeba.org/eng/sentences/show/780054 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这个工作需要实践。}} || zhe4/zhei4 ge4 gong1 zuo4 xu1 yao4 shi2 jian4 。|| Diese Arbeit verlangt Übung. (Mandarin, [https://tatoeba.org/eng/sentences/show/512896 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/human600 human600])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |把想法付诸实践是困难的。}} || ba3 xiang3 fa3 fu4 zhu1 shi2 jian4 shi4 kun4 nan2/nan4 de5 。|| Es Ist schwierig, Ideen in die Praxis umzusetzen. (Mandarin, [https://tatoeba.org/eng/sentences/show/797036 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Espi Espi])
|}
=== 障 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |德国在1880年代采取了一种社会保障制度。}} || de2 guo2 zai4 1880 nian2 dai4 cai3 qu3 le5 yi1 chong2/zhong3/zhong4 she4 hui4 bao3 zhang4 zhi4 du4 。|| Deutschland hat in den achtziger Jahren des 19. Jahrhunderts ein Sozialversicherungssystem eingeführt. (Mandarin, [https://tatoeba.org/eng/sentences/show/472968 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Sudajaengi Sudajaengi])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |“怎么了”“车出了故障”}} || “ zen3 me5 le5 ”“ che1 chu1 le5 gu4 zhang4 ”|| "What happened?" "The car broke down." (Mandarin, [https://tatoeba.org/eng/sentences/show/9932502 Tatoeba] [https://tatoeba.org/eng/user/profile/SbrAkr SbrAkr] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我个电视机出故障了,所以我勿得勿拿去修。}} || wo3 ge4 dian4 shi4 ji1 chu1 gu4 zhang4 le5 , suo3 yi3 wo3 wu4 de2/de5/dei3 wu4 na2 qu4 xiu1 。|| Mein Fernseher ging kaputt, also musste ich ihn reparieren lassen. (Shanghai, [https://tatoeba.org/eng/sentences/show/489896 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |在暴风雨中有一个电源故障了。}} || zai4 bao4 feng1 yu3 zhong1/zhong4 you3 yi1 ge4 dian4 yuan2 gu4 zhang4 le5 。|| Während des Sturms gab es einen Stromausfall. (Mandarin, [https://tatoeba.org/eng/sentences/show/765491 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |思想自由为宪法所保障。}} || si1 xiang3 zi4 you2 wei2/wei4 xian4 fa3 suo3 bao3 zhang4 。|| Gedankenfreiheit wird durch die Verfassung garantiert. (Mandarin, [https://tatoeba.org/eng/sentences/show/3383957 Tatoeba] [https://tatoeba.org/eng/user/profile/hanchingame hanchingame] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |在暴風雨中有一個電源故障了。}} || zai4 bao4 feng1 yu3 zhong1/zhong4 you3 yi1 ge4 dian4 yuan2 gu4 zhang4 le5 。|| Während des Sturms gab es einen Stromausfall. (Mandarin, [https://tatoeba.org/eng/sentences/show/765491 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |平等是由宪法保障的。}} || ping2 deng3 shi4 you2 xian4 fa3 bao3 zhang4 de5 。|| Die Gleichheit ist durch die Verfassung garantiert. (Mandarin, [https://tatoeba.org/eng/sentences/show/397099 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Manfredo Manfredo])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |两个男人在检查汽车出了什么故障。}} || liang3 ge4 nan2 ren2 zai4 jian3 cha2 qi4 che1 chu1 le5 shi2 me5 gu4 zhang4 。|| Zwei Männer suchen nach der Ursache für die Autopanne. (Mandarin, [https://tatoeba.org/eng/sentences/show/1415828 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我的車子故障了。}} || wo3 de5 che1 zi5 gu4 zhang4 le5 。|| Irgendetwas stimmt nicht mit meinem Auto. (Mandarin, [https://tatoeba.org/eng/sentences/show/905847 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Vortarulo Vortarulo])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |系统故障的修复工作持续了一整个晚上。}} || xi4 tong3 gu4 zhang4 de5 xiu1 fu4 gong1 zuo4 chi2 xu4 le5 yi1 zheng3 ge4 wan3 shang4 。|| Es dauerte die ganze Nacht, das System wieder instand zu setzen. (Mandarin, [https://tatoeba.org/eng/sentences/show/8789365 Tatoeba] [https://tatoeba.org/eng/user/profile/crescat crescat] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我的车子故障了。}} || wo3 de5 che1 zi5 gu4 zhang4 le5 。|| Irgendetwas stimmt nicht mit meinem Auto. (Mandarin, [https://tatoeba.org/eng/sentences/show/905847 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Vortarulo Vortarulo])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |由于系统出现故障,所以导致流程不能正常运行。}} || you2 yu2 xi4 tong3 chu1 xian4 gu4 zhang4 , suo3 yi3 dao3 zhi4 liu2 cheng2 bu4 neng2 zheng4 chang2 yun4 hang2/xing2 。|| Aufgrund eines Systemfehlers kann der Prozess nicht ordnungsgemäß ausgeführt werden. (Mandarin, [https://tatoeba.org/eng/sentences/show/2431765 Tatoeba] [https://tatoeba.org/eng/user/profile/fenfang557 fenfang557] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |电梯好像故障了。}} || dian4 ti1 hao3 xiang4 gu4 zhang4 le5 。|| Der Aufzug scheint außer Betrieb zu sein. (Mandarin, [https://tatoeba.org/eng/sentences/show/791432 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我遇到了故障。}} || wo3 yu4 dao4 le5 gu4 zhang4 。|| Ich hatte eine Panne. (Mandarin, [https://tatoeba.org/eng/sentences/show/472911 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Sprachprofi Sprachprofi])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我的笔记本电脑发生故障了。}} || wo3 de5 bi3 ji4 ben3 dian4 nao3 fa1 sheng1 gu4 zhang4 le5 。|| Mein Notebook ist abgestürzt. (Mandarin, [https://tatoeba.org/eng/sentences/show/5301836 Tatoeba] [https://tatoeba.org/eng/user/profile/bingxiong bingxiong] [https://tatoeba.org/eng/user/profile/MisterTrouser MisterTrouser])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我的打字机故障了。}} || wo3 de5 da3 zi4 ji1 gu4 zhang4 le5 。|| Meine Schreibmaschine spinnt. (Mandarin, [https://tatoeba.org/eng/sentences/show/1314156 Tatoeba] [https://tatoeba.org/eng/user/profile/vicch vicch] [https://tatoeba.org/eng/user/profile/Tamy Tamy])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这个进程必须立即停止,否则服务器会故障。}} || zhe4/zhei4 ge4 jin4 cheng2 bi4 xu1 li4 ji2 ting2 zhi3 , pi3 ze2 fu2 wu4 qi4 hui4 gu4 zhang4 。|| This process must be stopped immediately, otherwise the server will break down. (Mandarin, [https://tatoeba.org/eng/sentences/show/2915555 Tatoeba] [https://tatoeba.org/eng/user/profile/vicch vicch])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |机器结构很复杂,我们找来找去也找不到故障的原因。}} || ji1 qi4 jie1/jie2 gou4 hen3 fu4 za2 , wo3 men5 zhao3 lai2 zhao3 qu4 ye3 zhao3 bu4 dao4 gu4 zhang4 de5 yuan2 yin1 。|| The machine was too complicated for us to find out the cause of the trouble. (Mandarin, [https://tatoeba.org/eng/sentences/show/383387 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CM CM])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |由于服务器故障,昨天的总PV与正常相比下降了30%。}} || you2 yu2 fu2 wu4 qi4 gu4 zhang4 , zuo2 tian1 de5 zong3 PV yu3 zheng4 chang2 xiang1/xiang4 bi4 xia4 jiang4 le5 30%。|| As a result of the server breakdown, total PV of yesterday dropped by 30% compared with normal. (Mandarin, [https://tatoeba.org/eng/sentences/show/2915509 Tatoeba] [https://tatoeba.org/eng/user/profile/vicch vicch])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |空调故障了。}} || kong1/kong4 tiao2 gu4 zhang4 le5 。|| Die Klimaanlage funktioniert nicht. (Mandarin, [https://tatoeba.org/eng/sentences/show/836365 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Vortarulo Vortarulo])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我的电视机出故障了,所以我不得不拿去修。}} || wo3 de5 dian4 shi4 ji1 chu1 gu4 zhang4 le5 , suo3 yi3 wo3 bu4 de2/de5/dei3 bu4 na2 qu4 xiu1 。|| Mein Fernseher ging kaputt, also musste ich ihn reparieren lassen. (Mandarin, [https://tatoeba.org/eng/sentences/show/333279 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这个机器出故障了。}} || zhe4/zhei4 ge4 ji1 qi4 chu1 gu4 zhang4 le5 。|| Diese Maschine ist kaputt. (Mandarin, [https://tatoeba.org/eng/sentences/show/8759489 Tatoeba] [https://tatoeba.org/eng/user/profile/crescat crescat] [https://tatoeba.org/eng/user/profile/Tamy Tamy])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汽车发生故障了。}} || qi4 che1 fa1 sheng1 gu4 zhang4 le5 。|| Das Auto hatte eine Panne. (Mandarin, [https://tatoeba.org/eng/sentences/show/336112 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Manfredo Manfredo])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |系统故障的修复工作持续了一整夜。}} || xi4 tong3 gu4 zhang4 de5 xiu1 fu4 gong1 zuo4 chi2 xu4 le5 yi1 zheng3 ye4 。|| Es dauerte die ganze Nacht, das System wieder instand zu setzen. (Mandarin, [https://tatoeba.org/eng/sentences/show/8792698 Tatoeba] [https://tatoeba.org/eng/user/profile/slo_oth slo_oth] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |社会保障吗?他们在说什么笑话?}} || she4 hui4 bao3 zhang4 ma5 ? ta1 men5 zai4 shuo1 shi2 me5 xiao4 hua4 ?|| Social security? Who do they think they're kidding. (Mandarin, [https://tatoeba.org/eng/sentences/show/398923 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/shekitten shekitten])
|}
=== einzusortieren ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |质数就像生活,它们是完全符合逻辑的,但即使我们花所有时间来思考,也找不到规律。}} || zhi4 shu3/shuo4 jiu4 xiang4 sheng1 huo2 , ta1/tuo2 men5 shi4 wan2 quan2 fu2 he2 luo2 ji2 de5 , dan4 ji2 shi3/shi4 wo3 men5 hua1 suo3 you3 shi2 jian1 lai2 si1 kao3 , ye3 zhao3 bu4 dao4 gui1 lü4 。||Primzahlen sind wie das Leben, sie sind völlig logisch, aber es ist unmöglich, Regeln für sie zu finden, selbst wenn man seine ganze Zeit dem Nachdenken darüber widmet. ([https://tatoeba.org/eng/sentences/show/502784 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |数学就像物理的逻辑一样。}} || shu3/shuo4 xue2 jiu4 xiang4 wu4 li3 de5 luo2 ji2 yi1 yang4 。||Die Mathematik ist wie die Logik der Physik. ([https://tatoeba.org/eng/sentences/show/502736 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你说的话在逻辑上有问题。}} || ni3 shuo1 de5 hua4 zai4 luo2 ji2 shang4 you3 wen4 ti2 。||What you're saying isn't logical. ([https://tatoeba.org/eng/sentences/show/792464 Tatoeba] [https://tatoeba.org/eng/user/profile/FeuDRenais FeuDRenais])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我跟不上你的逻辑。}} || wo3 gen1 bu4 shang4 ni3 de5 luo2 ji2 。||Ich kann eurer Logik nicht folgen. ([https://tatoeba.org/eng/sentences/show/4760161 Tatoeba] [https://tatoeba.org/eng/user/profile/ryanwoo ryanwoo] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不正确的命题听起来可能符合逻辑。}} || bu4 zheng4 que4 de5 ming4 ti2 ting1 qi3 lai2 ke3/ke4 neng2 fu2 he2 luo2 ji2 。||An argument may be logically sound without being true. ([https://tatoeba.org/eng/sentences/show/5715191 Tatoeba] [https://tatoeba.org/eng/user/profile/verdastelo9604 verdastelo9604] [https://tatoeba.org/eng/user/profile/darinmex darinmex])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莱茵河是分隔法国和德国的界线。}} || lai2 yin1 he2 shi4 fen1 ge2 fa3 guo2 he2/he4/huo2 de2 guo2 de5 jie4 xian4 。||Der Rhein ist die Grenze, die Frankreich und Deutschland trennt. ([https://tatoeba.org/eng/sentences/show/389394 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠时间的长短可因人而异。}} || shui4 mian2 shi2 jian1 de5 chang2/zhang3 duan3 ke3/ke4 yin1 ren2 er2 yi4 。||The amount of time spent asleep can vary from person to person. ([https://tatoeba.org/eng/sentences/show/1164921 Tatoeba] [https://tatoeba.org/eng/user/profile/sysko sysko] [https://tatoeba.org/eng/user/profile/SHamp SHamp])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我最近一直睡眠不足。}} || wo3 zui4 jin4 yi1 zhi2 shui4 mian2 bu4 zu3 。||In letzter Zeit leide ich unter Schlafmangel. ([https://tatoeba.org/eng/sentences/show/889606 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孩子們需要大量的睡眠。}} || hai2 zi5 men5 xu1 yao4 da4 liang2/liang4 de5 shui4 mian2 。||Kinder brauchen viel Schlaf. ([https://tatoeba.org/eng/sentences/show/793508 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Wolf Wolf])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |累的时候睡眠是最好的药品。}} || lei2/lei3/lei4 de5 shi2 hou4 shui4 mian2 shi4 zui4 hao3 de5 yao4 pin3 。||Wenn man erschöpft ist, ist Schlaf die beste Medizin. ([https://tatoeba.org/eng/sentences/show/3380569 Tatoeba] [https://tatoeba.org/eng/user/profile/go_oo go_oo] [https://tatoeba.org/eng/user/profile/freddy1 freddy1])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |小孩需要很多睡眠}} || xiao3 hai2 xu1 yao4 hen3 duo1 shui4 mian2 ||Kinder brauchen viel Schlaf. ([https://tatoeba.org/eng/sentences/show/2411824 Tatoeba] [https://tatoeba.org/eng/user/profile/xujie8410 xujie8410] [https://tatoeba.org/eng/user/profile/Wolf Wolf])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |睡眠是最大的小偷,它偷了我们一半的生命。}} || shui4 mian2 shi4 zui4 da4 de5 xiao3 tou1 , ta1/tuo2 tou1 le5 wo3 men5 yi1 ban4 de5 sheng1 ming4 。||Der Schlaf ist der größte Dieb. Er stiehlt uns die Hälfte unseres Lebens. ([https://tatoeba.org/eng/sentences/show/332750 Tatoeba] [https://tatoeba.org/eng/user/profile/popolady popolady] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你有足够到睡眠吗?}} || ni3 you3 zu3 gou4 dao4 shui4 mian2 ma5 ?||Hast du genug Schlaf bekommen? ([https://tatoeba.org/eng/sentences/show/2411830 Tatoeba] [https://tatoeba.org/eng/user/profile/xujie8410 xujie8410] [https://tatoeba.org/eng/user/profile/Wolf Wolf])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她在睡眠中安详地去世了。}} || ta1 zai4 shui4 mian2 zhong1/zhong4 an1 详 de4/di4 qu4 shi4 le5 。||Sie starb friedlich im Schlaf. ([https://tatoeba.org/eng/sentences/show/334598 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/freddy1 freddy1])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我昨晚失眠了。}} || wo3 zuo2 wan3 shi1 mian2 le5 。||Ich konnte letzte Nacht nicht schlafen. ([https://tatoeba.org/eng/sentences/show/353520 Tatoeba] [https://tatoeba.org/eng/user/profile/ruicong ruicong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |孩子需要很多睡眠。}} || hai2 zi5 xu1 yao4 hen3 duo1 shui4 mian2 。||Kinder brauchen viel Schlaf. ([https://tatoeba.org/eng/sentences/show/358180 Tatoeba] [https://tatoeba.org/eng/user/profile/rmgao rmgao] [https://tatoeba.org/eng/user/profile/Wolf Wolf])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我們常常把死亡比作睡眠。}} || wo3 men5 chang2 chang2 ba3 si3 wang2 bi4 zuo4 shui4 mian2 。||Death is often compared to sleep. ([https://tatoeba.org/eng/sentences/show/1324909 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你需要多少小时的睡眠?}} || ni3 xu1 yao4 duo1 shao3 xiao3 shi2 de5 shui4 mian2 ?||Wie viele Stunden Schlaf brauchst du? ([https://tatoeba.org/eng/sentences/show/414627 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那个溺水的男人抓紧了绳子。}} || na4/nei4 ge4 ni4/niao4 shui3 de5 nan2 ren2 zhua1 jin3 le5 sheng2 zi5 。||Der vom Ertrinken bedrohte Mann griff nach dem Seil. ([https://tatoeba.org/eng/sentences/show/336862 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Tamy Tamy])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |這個孩子知道如何游泳,所以她不會在水裡溺死。}} || zhe4/zhei4 ge4 hai2 zi5 zhi1 dao4 ru2 he2 you2 yong3 , suo3 yi3 ta1 bu4 hui4 zai4 shui3 li3 ni4/niao4 si3 。||Das Kind kann schwimmen, also wird es nicht im Wasser ertrinken. ([https://tatoeba.org/eng/sentences/show/918085 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/kolonjano kolonjano])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他溺水而亡。}} || ta1 ni4/niao4 shui3 er2 wang2 。||He was drowned. ([https://tatoeba.org/eng/sentences/show/1767973 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/CM CM])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |理论上说,理论和实践没有区别。但实践上说,是有的。}} || li3 lun4 shang4 shuo1 , li3 lun4 he2/he4/huo2 shi2 jian4 mei2/mo4 you3 qu1 bie2 。 dan4 shi2 jian4 shang4 shuo1 , shi4 you3 de5 。||In der Theorie gibt es keinen Unterschied zwischen Theorie und Praxis. Aber in der Praxis gibt es einen. Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied, sehr wohl jedoch in der Praxis. ([https://tatoeba.org/eng/sentences/show/389790 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL] [https://tatoeba.org/eng/user/profile/deLeeuw deLeeuw])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这个工作需要实践。}} || zhe4/zhei4 ge4 gong1 zuo4 xu1 yao4 shi2 jian4 。||Diese Arbeit verlangt Übung. ([https://tatoeba.org/eng/sentences/show/512896 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/human600 human600])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |因为她是一个喜欢动手实践的人,她常常把朋友的汽车修好。}} || yin1 wei2/wei4 ta1 shi4 yi1 ge4 xi3 欢 dong4 shou3 shi2 jian4 de5 ren2 , ta1 chang2 chang2 ba3 peng2 you3 de5 qi4 che1 xiu1 hao3 。||As she's a very practical person, she often fixes her friends' cars. ([https://tatoeba.org/eng/sentences/show/788984 Tatoeba] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|}
== Lückentexte ==
=== [[:zh:Wikijunior:太阳系/月球|Wikijunior: 太阳系/月球 Sonnensystem/Mond]] ===
{| class="wikitable"
! [[:zh:Wikijunior:太阳系/月球|Wikijunior: 太阳系/月球 Sonnensystem/Mond]] !! Übersetzung Christian Bauer
|-
| 月球 上 有 什么?|| Was gibt es auf dem Mond?
|-
| 月球 的 表面 是 不断 的 低谷 和 Gebirge。|| Die Mondoberfläche hat keine neueren Täler und Gebirge
|-
| 月球 上 没有 动物,|| Auf dem Mond gibt es keine Tiere.
|-
| 也 没有 植物,|| und auch keine Pflanzen.
|-
| 甚至 没有 生命,|| Das geht soweit, dass es gar kein Leben gibt.
|-
| 是 一个 平静 的 世界。|| Es ist eine unberührte Welt.
|-
| 一个 体重 60公斤 的 人 到了 月球,|| Wäre ein 60 kg schwerer Mensch auf dem Mond
|-
| 再 称一称 自己 的 体重 的话,|| und würde man sein Gewicht erneut wiegen,
|-
| 会 发现 只 有 10公斤 了!|| würde man bemerken, dass er nur 10 kg wiegen würde.
|-
| 这 是 因为 月球 比 地球 要小,|| Das liegt daran, dass der Mond im Vergleich zur Erde viel kleiner ist.
|-
| 所以 重力 也 小了。|| Also ist auch seine Schwerkraft kleiner.
|-
| 由于 月球 上 没有 空气,|| Weil es auf dem Mond keine Atmosphäre gibt,
|-
| 因此 “白天” 很 热,|| daher ist es am hellen Tag sehr heiß
|-
| 而 “晚上” 则会 非常 的 冷。|| und in der Nacht wird es anschließend sehr kalt.
|-
| 所以, 宇航员 到了 月球 上,|| Wenn also Astronauten den Mond betreten,
|-
| 需要 有 Sauerstoff-筒,|| brauchen sie Sauerstoffzylinder
|-
| 还 要 穿 厚厚 的 宇航服。|| und sie müssen einen sehr dicken Raumanzug tragen.
|-
| 月球 上 没有 风,|| Auf dem Mond gibt es keinen Wind,
|-
| 所以 小行星 或者 Meteorit Einschlag 月球 后,|| folgich ist es nach dem Einschlag eines Asteroids oder Meteorits auf dem Mond so,
|-
| 留下 的 Spuren 很 久 也 不会 消失。|| dass sehr lange Spuren zurückbleiben, die nicht verschwinden
|-
| Meteoriteneinschläge 在 月球 表面 上,|| Meteoriteneinschläge auf der Mondoberfläche
|-
| 会 留下 一个 深深 的 Loch。|| können ein sehr tiefes Loch hinterlassen,
|-
| 原来 的 土石 被 推 到 四周,|| aufgrund des Bodens, der durch den Einschlag zu allen (4) Seiten gedrückt wird,
|-
| 形成 一个 环形 凸 起来,|| und eine ringförmige, konvexe Form bildet
|-
| 就 好像 火山口 一样,|| ähnlich wie Vulkanöffnungen.
|-
| 称 为 环形山。|| Sie werden Krater genannt.
|-
|
|-
| 月球 上 有 水 吗?|| Gibt es Wasser auf dem Mond?
|-
| 月球 上 不仅 没有 空气,|| Auf dem Mond gibt es nicht nur keine Atmosphäre,
|-
| 也 没有 flüssiges 的 水。|| Es gibt auch kein flüssiges Wasser.
|-
| 月球 表面 有 些 地方 被 称为 “海”。|| Die Mondoberfläche hat einige Stellen, die "Meere" genannt werden.
|-
| 这 是 因为 以前 的 天文学家 观察 月球 的 时候 发现 有 些 地方 比较 暗,|| Dies ist so, weil die früheren Astronomen, als sie den Mond betrachteten, entdeckten, dass es einige vergleichsweise dunkle Stellen gibt.
|-
| 他们 就 猜想 这 些 地方 可能 是 湖泊、 河流 或者 海洋。|| Sie nahmen anschließend an, das diese Stellen möglicherweise Seen, Flüsse oder Meere wären.
|-
| 这 些 地方 其实 是 一些 平滑 的 低地。|| Diese Orte sind in Wahrheit einige flache Tiefebenen.
|-
| 有些 “月海” 是 因为 很久以前,|| Dass es also einige "Mondmeere" gibt liegt an diesen früheren Zeiten.
|-
| 月亮 上 的 火山 ausbrachen,|| Als die Mondvulkane ausbrachen,
|-
| 流出来 的 岩浆 “铺满” 了 低地, 而 形成 的。|| verteilte und füllte die fließende Lave die Tiefebenen und formte sie so.
|-
|
|-
| 月球 上 的 矿藏|| Mineralische Lagerstätten auf dem Mondes
|-
| 月球 上 也 有 地球 上 没有 的 矿石。|| Auf dem Mond gibt es auch Erze, die es auf der Erde nicht gibt.
|-
| 月球 上 有着 丰富 的 Helium-3。|| Auf dem Mond gibt es reiche Vorkommen an Helium-3
|-
| Helium-3 可以 发生 核能 反应,|| Helium-3 kann durch Kernreaktionen
|-
| 制造出 巨大 的 能量,|| sehr viel Energie erzeugen
|-
| 因此 是 很好 的 能源。|| daher ist es eine sehr gute Energiequelle.
|-
| 此外, 月球 上 还 有 很多 地球 上 很 少见 的 金属元素。 || Außerdem gibt es auf dem Mond auch noch sehr viele auf der Erde nur gering vorkommende Metalle.
|}
=== [http://magazine.marcopoloproject.org/%e6%98%af%e4%bb%80%e4%b9%88%e8%ae%a9%e4%ba%ba%e6%84%9f%e8%a7%89%e4%b8%ad%e5%9b%bd%e4%ba%ba%e5%a4%aa%e5%a4%9a%ef%bc%9f-people-theres-chinese/ the marco polo project: 是什么让人感觉“中国人太多”?] ===
我经常听见一些朋友,遇到国内什么事情解决不好,就抱怨道:“没办法,中国人太多了!”正如 许小年先生讽刺过的:看病难,是因为中国人太多,医生压力大;教育难,是因为国家人口多,教师压力大;住房难,是因为国家人口多,开发商压力大;肉类 bereitzustellen 难,是因为国家人口多,猪们压力大……
说“中国人太多”,其含义就是说,中国人多导致资源 Vorrat 很紧张,大量产品-Erzeugung 不足。但这个说法是不符合事实的。虽然中国人口总量不少,但因为国土面积也大,中国的人口密度在世界上并不算高,根据联合国的资料,在所有国家和地区中只排第73位。 许多发达国家,例如英国、德国、荷兰、意大利和瑞士,人口密度都远高于中国。而且,我国单位国土面积的主要资源 Reserven 在世界上处于中上行列,因此,按人均主 要资源论,中国更是在世界上处在中游位置,并不短缺。从理论上说,地球可以承载的人口数量,肯定有一个极限值,超过这个值人类就会过分 bevölkert。但在实践中, 即使那些比中国人口密度大得多的国家,也还没有遭遇到这个极限。更不要说中国了。可以这么说,迄今为止,我们看到的许多所谓“人太多”、“资源紧张”现 象,绝大部分是特定的社会经济制度导致的,而不是因为真的人口太多了。
有些朋友对此始终无法相信。这些朋友常常喜欢举的,就是日本东京的例子。他们认为,论社会制度和发达水平,日本作为世界上最富裕的市场经济和民主国家,不能说不优越。但是东京地铁不还是那么 bevölkert 吗?东京住房不还是那么紧张吗?原因就是因为日本人口密度太大了,是中国的2.5倍!这些朋友得出结论说:可见人口太多,还是造成资源短缺的一个决定性因素。
然而,这些朋友忽视的事实是:世界上一些人口极为 kaum 的发达和准发达国家,同样拥有最 gedrängt 的地铁、最拥堵的街道。2008年,美国《时代》杂志曾把巴西圣保罗市评为世界上交通最为拥堵的城市。以我本人亲身经历看,这个评价是恰如其分的。但巴西每平方公里人口只有23人,是中国的6分之一,日本的15分之一。另一个著名例子是莫斯科。莫斯科地铁极为 gedrängt,每年运输24亿人(2009年数据),平均每公里地铁年运输80万人,在世界上仅次于东京地铁,远远超过北京和上海。而俄罗斯每平方公里人口少达8.4人,是世界上人烟最为 gering 的国家之一。我不知道如果有些中国人去了一趟圣保罗或者莫斯科,会不会发 bewegt 说“巴西人太多了!”或者“俄罗斯人太多了!”呢?
造成“人太多”感觉的原因是多种多样的,在这篇短评中无法周详讨论。只略说几句。一个很重要的原因——大多数的“人口 überbevölkert,资源紧张”的大城市和超大城市,都是在20世 纪下半叶以后才形成的,属于所谓比较年轻的城市,或者说,是后工业时代的城市。后工业城市的特点,是以金融、管理、Handel、地产、Nahrungsmittel-服务等第三产业为城市 的核心产业,而这些服务型产业,都喜欢有较高人口密度以取得规模效应。相反,早期形成的那些城市,无论是制造型城市、工业港口城市还是带有前工业色彩的自 治型乡镇,它们的规模都相对较小,人口密度相对较低。
现在有些朋友去欧美国家,经常惊叹他们“小国寡民”一样的生活方式,错觉以为欧美都是“地广人 wenig”。其实美国的平均人口密度并不小,而 欧洲,我上面说过,很多国家比中国人口密度高。但我们不会发出“欧洲人太多”或“美国人太多”的 Seufzer,乃是因为作为 seit langem 资本主义发达国家,这些国家的城市 化进程发生得比较早。美国早在1940年代城市化率就达到了50%,欧洲很多城市更是有几百年历史。大量中小城市在早期城市化时期形成,并保留到今天,大大拉低了平均的城市人口密度。另一方面,几乎所有那些在20世纪下半叶才开始急速城市化的国家,都出现了患有严重“城市病”的超大城市,无论这些国家人口密度是高、不高还是很低。除了前面提到的圣保罗以外,著名的还有墨西哥城、里约热内卢、布宜诺斯艾利斯、首尔等,包括日本东京都可以列为此类后发达的超大城市。
...
[http://www.bullogger.com/blogs/wuxianghong/archives/383906.aspx bullogger 2011-9-7]
[http://magazine.marcopoloproject.org/authors/Wu%20Xianghong%20-%20%E5%90%B4%E5%90%91%E5%AE%8F/ Wu Xianghong]
[http://magazine.marcopoloproject.org/%e6%98%af%e4%bb%80%e4%b9%88%e8%ae%a9%e4%ba%ba%e6%84%9f%e8%a7%89%e4%b8%ad%e5%9b%bd%e4%ba%ba%e5%a4%aa%e5%a4%9a%ef%bc%9f-why-do-people-think-that-theres-too-many-chinese-english/ Übersetzung]
Why do people think that “There’s too many Chinese?”
I often hear friends complain, whenever they encounter some difficulties in China: “there is no solution, there’s too many Chinese people!” As Mr Xu would say sarcastically: because there are too many Chinese people, it’s hard to get medical treatment, as doctors are under pressure; because there are too many Chinese people, it’s hard to get education as teachers are under pressure; because there are too many Chinese people, it’s hard to get a house as property developers are under pressure; because there are too many Chinese people, it’s hard to get meat, as the pigs are under pressure…
Saying “there’s too many Chinese people” means: the large number of Chinese people has caused a pressure on resources, and an inadequate supply of commodities. But this view is not in line with reality. Even though the population of China is not small, since China’s land area is big, China’s population density is not high by world standards: according to UN statistics, it only ranks in 73rd position among all nations and territories. Many developed countries, such as England, Germany, the Netherlands, Italy and Switzerland have much higher population density than China. However, in terms of land area and natural resources, China is in the upper middle ranks among the nations of the world, and so, in terms of primary resources per capita, China holds a middle position among the nations of the world, and there is no actual shortage. In theory, there is obviously a limit to the population that the earth can carry, and if we exceed this value, we will be overcrowded. However, in practice, even these countries whose population density is much greater than China’s have yet to meet this limit. And so China is even further from it. So we can say that, to this date, the many phenomenons of ‘overcrowding’ and ‘resource scarcity’ we observed have specific causes in the social and economic system, but aren’t due to the actual size of the population.
I have some friends who don’t believe this at all. These friends often like totake Tokyo as an example. They think, in terms of the social system and level of development, Japan is the richest Democratic country with a market economy, we can’t say it’s not superior. But still, isn’t the Tokyo subway very crowded? Isn’t there a lot of pressure on housing in Tokyo? This is because the population density in Japan is 2.5 times that of China. These friends conclude: as you can see, a large population is the decisive cause for resource shortage.
However, the fact that people neglect is that in this world, even some developed and almost-developed countries with very small population still have the most crowded subways and streets. In 2008, Times Magazine scored San Paolo in Brazil, which has the heaviest traffic in the world. From my personal experience, this comment is appropriate. The population density in Brazil is only 23 people per square kilometre, which is one sixth of China, or one fifteenth of Japan. Another famous example is Moscow. It is extremely crowded in the Moscow subway, because 2,4 billion people use it every year ( 2009 data), on average, there’s 0.8 million people for each km of subway every day, it’s the second most used in the world after Tokyo, far ahead of Beijing and Shanghai. However, the average population density in Russia is as low as 8.4 people per square km, which is one of the lowest in the world. If Chinese people go to San Paolo or Moscow, I’m not sure if they would feel overwhelmed and say: “There’s too many Brazilians!” or “There’s too many Russians!”
The feeling that ‘there’s too many people’ has many causes, and we can’t carefully discuss all of them in this commentary. We can only say a few words about it. One very important reason – a large majority of the ‘overcrowded and constrained’ big cities and megacities have only formed after the second half of the 20th century, and they are relatively young cities – or we can say they are post-industrial cities. The characteristics of the post-industrial city are that its core industries are the tertiary activities of finance, management, real estate and catering services, and these service-based industries all enjoy high population density to achieve economies of scale. On the contrary, the cities that were formed earlier, whether they’re manufacturing centres, industrial port cities, or autonomous townships of pre-industrial type, all are relatively small and have a relatively low population density.
I now have some friends who have been to Europe and the US, and often marvel at the ‘small town’ lifestyle over there, with the mistaken impression that Europe and the US are sparsely populated. But in fact, the average population density in the US is not small, and in Europe, as I said previously, many countries have higher population density than China. Yet the reason we won’t feel that “there’s too many Europeans” or “there’s too many Americans”, is that these are old capitalist countries, and their urbanisation occurred relatively early. In the US, the rate of urbanization reached 50% in the 1940s, and many European cities have centuries of history. Many small and medium cities were formed in the early period of industrialisation, and have been preserved to this day, greatly pulling down the average population density. On the other hand, in almost all the countries who started to rapidly urbanize in the second half of the 20th century, mega-cities with ‘urban disease’ have emerged, whether these cities have high or low population density. In addition to Sao Paolo which we mentioned earlier, famous examples are Mexico City, Rio de Janeiro, Buenos Aires, Seoul, or even Tokyo in Japan – all can be classified as ‘post-developed’ megacities.
...
[http://magazine.marcopoloproject.org/author/julienleyre/ Julien Leyre] [http://julienleyre.wordpress.com website]
The first four paragraphs of this text were translated during a Marco Polo Project translation workshop, by Wendy, Wei Ching, Yao Hua, Kiki, Cyrus, Justin and Julien.
=== Haenisch: Lehrgang der klassischen chinesischen Schriftsprache ===
====第一百二十七課====
第一百二十七课
dì yī bǎi èr shí qī kè
Hundertsiebenundzwanzigste Lektion
------------------
長城
长城
cháng chéng
Die [[w:Chinesische_Mauer|Große Mauer]]
------------------
周自平王東_
周自平王东迁
zhōu zì píng wáng dōng qiān
Die Zhou verlegten (ihre Hauptstadt) seit König Ping nach Osten.
------------------
王纲不 mächtig
wáng gāng bù chéng
Das Königtum (Des Königs Leitfaden) war nicht (mehr) mächtig.
------------------
諸侯_爭
诸侯纷争
zhū hóu fēn zhēng
Die Fürsten waren gegenseitig im Streit.
------------------
五霸興於前
五霸兴于前
wǔ bà xìng yú qián
Die [[w:Fünf_Hegemonen|Fünf Hegemonen]] (der Frühlings- und Herbstperiode) stiegen zuerst auf.
------------------
七雄起於後
七雄起于后
qī xióng qǐ yú hòu
Die [[w:Sieben_mächtige_Fürstentümer_der_Zeit_der_Streitenden_Reiche|Sieben Großmächte]] stiegen danach auf,
------------------
至秦始皇滅六國
至秦始皇灭六国
zhì qín shǐ huáng miè liù guó
bis Qin Shihuang die übrigen sechs Länder auslöschte.
------------------
天下始歸一_
天下始归一统
tiān xià shǐ guī yī tǒng
Die Länder (unter dem Himmel) waren erstmalig zu einem Ganzen zurückgekehrt.
------------------
始皇北備匈奴
始皇北备匈奴
shǐ huáng běi bèi xiōng nú
Shihuang rüstete den Norden gegen die Xiongnu.
------------------
_長城
筑长城
zhù cháng chéng
Er baute die Große Mauer.
------------------
城五千餘里
城五千余里
chéng wǔ qiān yú lǐ
Die Mauer war mehr als 5000 Li lang.
------------------
高三丈
高三丈
gāo sān zhàng
Sie war drei Zhang (insgesamt 10m) hoch.
------------------
每隔三十六丈
每隔三十六丈
měi gé sān shí liù zhàng
Nach jedem Abschnitt von 36 Zhang (ca. 100m)
------------------
设 Erdwerk 障以為防守
设 Erdwerk 障以为防守
shè bǎo zhàng yǐ wéi fáng shǒu
errichtete er ein Erdwerk als Hindernis, um als Verteidungung und Schutz zu dienen.
------------------
規模雄壯
规模雄壮
guī mó xióng zhuàng
Das Ausmaß war majestätisch.
------------------
為世間一大工程
为世间一大工程
wèi shì jiān yī dà gōng chéng
Es ist eines der großen Ingenieursprojekte der Welt.
------------------
== Texte ==
=== [[n:zh:中国大陆用户无法连入Hotmail邮件服务|Wikinews 中国大陆用户无法连入Hotmail邮件服务]] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
【2006年5月19日讯】
从5月8日开始,微软公司推出的全球电子邮件服务 Hotmail在中国大陆地区,用户无法以正常方式顺利连入邮件服务收发信件。<br/><br/>据MSN中国负责人回应说,“造成MSN的各项服务功能不能正常使用的因素复杂多样,很有可能是本地网络接入设备出现故障。”并承诺尽快解决问题。<br/><br/>然而根据德国之声的报道,这是中国政府对Hotmail进行的封锁。此次封锁可能是由于微软公司拒绝交出中国大陆政府声称的所谓“异议人士和民权人士”的用户资料而导致。而在中国互联网上也传有来自美国微软总部的官方声明邮件,说明是由于Live.com域名被中国的ISP封锁,因为现在包括Hotmail在内的微软许多服务都要使用Live.com网站。<br/><br/>目前一些网络专业人士已经寻找到了一些紧急登陆 Hotmail 的方法,其中包括采用 MSN 设计为移动终端提供的 Mobile Hotmail 邮件服务、利用破网工具登陆Hotmail等。<br/><br/>目前,大部分中国大陆的用户均无法登陆Hotmail收发邮件,给中国大陆的许多个人、企业、公司甚至某些政府部门带来诸多不便。<br/><br/>中国政府尚未给出正面回应,解释Hotmail是否被封及其原因。
}}
Noch keine Übersetzung
=== [http://museum.marcopoloproject.org/2015/10/14/this-place-nearby-weve-never-been-to-%e9%82%a3%e4%b8%aa%e7%a6%bb%e6%88%91%e4%bb%ac%e5%be%88%e8%bf%91%e4%bd%86%e4%bb%8e%e6%9d%a5%e6%b2%a1%e5%8e%bb%e8%bf%87%e7%9a%84%e5%9c%b0%e6%96%b9/ the marco polo project: 那个离我们很近但从来没去过的地方 – This place nearby we’ve never been to (Auszug)] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |说“那个”,肯定不准确,应该用“那些”——也就是那些离我们很近但我们从来没去过的地方。这样的地方当然太多了,我想应该再加一点补充,这些地方似乎在日常的逻辑里是我们应该去的,至少一次。<br/><br/>但没有,我们一次都没去过。<br/><br/>比如说吧,北京动物园,我从来没去过。<br/><br/>最近小暖同学长大了许多,走路很好甚至开始跑起来了。天气变暖,带她出来玩的时候,经常会遇见小区里的狗。
}}
[http://museum.marcopoloproject.org/author/liu-shisan/ Liu Shisan] [http://www.douban.com/note/501883900/ Douban]
I’m saying ‘that’, but surely, I should say ‘those’ – those places not far from us where we’ve never been. Of course, there’s too many of those places, so I think I should add a clause, and speak of these places where, according to every logic, we should have been at least once.
But we haven’t been there, not once.
For instance, Beijing Zoo, I’ve never been there.
My daughter has grown up a lot recently, she can walk very well, even run sometimes. When the weather is nice and I spend time with her, we often see the dog of our compound.
...
=== [https://ctext.org/liji/san-nian-wen/ens Das Buch der Riten: San Nian Wen] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
三年之丧何也?曰:称情而立文,因以饰群,别亲疏贵践之节,而不可损益也。故曰:无易之道也。
}}
Übersetzung James Legge
What purposes do the mourning rites for three years serve? The different rules for the mourning rites were established in harmony with (men's) feelings. By means of them the differences in the social relations are set forth, and the distinctions shown of kindred as nearer or more distant, and of ranks as more noble or less. They do not admit of being diminished or added to; and are therefore called 'The unchanging rules.'
=== [https://ctext.org/analects/ens Analekte des Konfuzius] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 子张问善人之道。子曰:“不践迹,亦不入于室。” }}
Übersetzung James Legge
Zi Zhang asked what were the characteristics of the good man. The Master said, "He does not tread in the footsteps of others, but moreover, he does not enter the chamber of the sage."
== [[s:zh:弟子規 | 弟子规]] ==
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 谨}} || jin3 || Sorgfalt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 朝起早、夜眠迟}} || chao2/zhao1 qi3 zao3 、 ye4 mian2 chi2/zhi4 || Morgens stehe früh auf, Abends schlafe spät ein
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 老易至、惜此时}} || lao3 yi4 zhi4 、惜 ci3 shi2 || Das Alter kommt schnell, nutze diese Zeit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 晨必盥、兼漱口}} || chen2 bi4 guan4 、 jian1 shu4 kou3 || Wasche morgens die Hände, zusätzlich spüle den Mund
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 便溺回、辄净手}} || bian4 ni4/niao4 hui2 、辄 jing4 shou3 || Nach dem Toilettengang wasche jeweils die Hände
|}
== [https://zh.wikibooks.org/zh-cn/德语/文法 德语 Kapitel 文法] ==
=== Text ===
德语/文法
德语的语法变化非常复杂,但就语言本身而言,德语的整个语法体系还是比较逻辑的。
名词
德语的名词分阴性,中性和阳性,而且除了直接对人的名词的性比较规则外其它的词的性往往没有规律。比如在德语中太阳是阴性,月亮是阳性。大多数河流的名称是阴性,但少数河流(如莱茵河)的名称是阳性。
在德语中,尤其是名词,两个或甚至两个以上词可以拼到一起组成一个复合词。这个做法有点象汉语中的词组。比如:Programmier|sprache(编程-语言),Pflanzen|schutz|mittel(植物-保护-剂,即农药)等等。
名词在句内可以有四个不同的格:主格、属格、与格和宾格(许多语法教科书中也称第一、二、三、四格)(属格、与格和宾格,又称第二格受词Genitiv、第三格受词Dativ和第四格受词Akkusativ)。以下这句话中四种格都用到了:
Der Lehrer der Klasse schreibt den Eltern einen Brief.
教师 班级的 写 家长们 一封信。
主格 属格 动词 与格 宾格
班主任给家长们写了一封信
德语中的名词第一个字母必须大写。这个规则也是从马丁·路德开始的。尤其在使用动名词时这个规则往往导致错误,因此1990年代时讨论修改正字法时有人提出废除这个规则。虽然这个建议得到一些知名的语言学家和一些有权威的报纸和电视节目的支持,它受到大多数人反对,因此没有被采纳。
=== Übersetzung(shilfe) ===
Deutsche Grammatik
Die Variationen in der deutschen Grammatik sind sehr komplex, aber was die Sprache selbst angeht, ist das deutsche Grammatiksystem noch vergleichsweise logisch.
Nomen
Deutsche Hauptwörter teilen sich auf in weibliche, sächliche und männliche Wörter.
Die Bestimmung des grammatische Geschlecht hat oft keine festen Regeln
Zum Beispiel ist im Deutschen die Sonne weiblich, der Mond ist männlich
Die meisten Flussnamen sind weiblich, aber es gibt auch einige männliche Flussnamen (z.B. der Rhein)
Im Deutschen können, besonders bei Hauptwörtern, zwei oder mehr als zwei Wörter zusammengefügtt werden und bilden so ein zusammengesetztes Wort
Diese Verwendung ist in etwa vergleichbar mit chinesischen Phrasen.
Beispiele sind Programmier|sprache, Pflanzen|schutz|mittel, etc.
Hauptwörter können in Sätzen vier unterschiedliche Fälle annehmen.
Werfall (Nominativ), Wesfall (Genitiv), Wemfallund Wenfall (Akkusativ) (Diese werden in viele Grammatiken als erster, zweiter, dritter und vierter Fall bezeichnet
Der Wesfall, Wemfall und Wenfall werden auch wie folgt bezeichnet: Der zweite Fall als Genitiv, der Dritte als Dativ und der vierte als Akkusativ.
Im nachfolgenden Satz werden alle vier Fälle verwendet:
Der Lehrer der Klasse schreibt den Eltern einen Brief.
Nominativ Genitiv Verb Dativ Akkusativ
Der Lehrer der Klasse schreibt den Eltern einen Brief.
Bei deutschen Hauptwörtern muss man den ersten Buchstaben groß Schreiben
Diese Regel hat mit Martin Luther begonnen.
Besonders bei der Verwendung von Gerundien führt dies Regel häufig zu Fehlern.
Daher gab es, als in den 1990er Jahren Diskussionen über die Rechtschreibreform geführt wurden, Menschen, die vorschlugen, diese Regel aufzugeben.
Obwohl dieser Vorschlag in einigen bekannten Grammatikern und einigen wichtigen Zeitungen und Fernsehprogrammen Unterstützer fand, gab es Widerstand der meisten Leute. Daher wurde er nicht angenommen.
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 628|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 628|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 630|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 630}}
</noinclude>
r5hgnf3qvbh6wslzoi9vky7ysl4jin8
Vokabeltexte Chinesisch/ Vokabellektionen/ Lektion 630
0
101714
1088545
1013235
2026-07-02T08:57:37Z
Christian-bauer
6469
kleinere Ergänzungen und Korrekturen
1088545
wikitext
text/x-wiki
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 629|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 629|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 631|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 631}}
</noinclude>
== Zeichen ==
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |幢}} || chuang2 || Fähnchen, Wimpel, beschriebene buddhistische Steinsäule || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=幢}}[[Datei:幢-seal.svg|40px]][[Datei:幢-bigseal.svg|40px]](HSK 3.0 Band 7-9)
|-
| rowspan="2"| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠}} || guan1 || Hut || rowspan="2"| {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=冠}}
|-
| guan4 || an der Spitze stehen, Grat, aufsetzen, Hut, Kopfbedeckung, Krone, Kronenether, Welle, Wellenkamm, volljährig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復}} || fu4 || (traditionelle Schreibweise von 复), doppelt, vervielfältigen, wiederholen, wiederherstellen, erneut, noch einmal, komplex, antworten, hin und her drehen, sich rächen || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=復}} [[Datei:復-oracle.svg|40px]][[Datei:復-bronze.svg|40px]][[Datei:復-silk.svg|40px]][[Datei:復-slip.svg|40px]][[Datei:復-seal.svg|40px]][[Datei:復-bigseal.svg|40px]]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履}} || lü3 || Schuh, Schuhmacher, beschlagen, Schritt, gehen, ausführen, durchführen || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=履}} [[Datei:履-oracle.svg|40px]][[Datei:履-bronze.svg|40px]][[Datei:履-seal.svg|40px]][[Datei:履-bigseal.svg|40px]]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |阈}} || yu4 || (Tür)Schwelle, Grenze || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=阈}}
|}
== Zusammengesetzte Wörter ==
=== 幢 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |经幢}} || jing1 chuang2 || Buddhist stone pillar
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |經幢}} || jing1 chuang2 || (traditionelle Schreibweise von 经幢), Buddhist stone pillar
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |幢幢}} || chuang2 chuang2 || (shadows) flickering, dancing
|}
=== 冠 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |夺冠}} || duo2 guan4 || eine Meisterschaft gewinnen || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冰冠}} || bing1 guan4 || Eiskappe
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |桂冠}} || gui4 guan1 || Lorbeerkranz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠词}} || guan4 ci2 || Artikel <Grammatik>
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠詞}} || guan4 ci2 || (traditionelle Schreibweise von 冠词), Artikel <Grammatik>
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |牙冠}} || ya2 guan4 || Zahnkrone
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸟冠}} || niao3 guan4 || Haarknoten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鳥冠}} || niao3 guan4 || (traditionelle Schreibweise von 鸟冠), Haarknoten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸡冠}} || ji1 guan1 || Haarschopf, Hahnenkamm, Helmzierde ??? Der Hahnenkamm ist eine Helmzierde?
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |雞冠}} || ji1 guan1 || (traditionelle Schreibweise von 鸡冠), Haarschopf, Hahnenkamm, Helmzierde ??? Der Hahnenkamm ist eine Helmzierde?
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |花冠}} || hua1 guan1 || Blumenkrone, Krone
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |羽冠}} || yu3 guan1 || Mütze
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠龙}} || guan4 long2 || Corythosaurus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |皇冠}} || huang2 guan1 || Kaiserkrone, Krone
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |王冠}} || wang2 guan1 || Krone, Königskrone, Zenit, Bombage (ballige Fläche)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |树冠}} || shu4 guan4 || Krone
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |樹冠}} || shu4 guan4 || (traditionelle Schreibweise von 树冠), Krone
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠军}} || guan4 jun1 || Champion, Sieger, Erster, oder Gewinner eines Wettbewerb || (HSK 3.0 Band 5)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠軍}} || guan4 jun1 || (traditionelle Schreibweise von 冠军), Champion, Sieger, Erster, oder Gewinner eines Wettbewerb
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠县}} || guan1 xian4 || Kreis Guan (Provinz Shandong, China)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠縣}} || guan1 xian4 || (traditionelle Schreibweise von 冠县), Kreis Guan (Provinz Shandong, China)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠子}} || guan1 zi5 || Bergrücken, Büschel, Krone, Welle, Wellenkamm
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |毛冠鹿}} || mao2 guan4 lu4 || Schopfhirsch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |黄品冠}} || huang2 pin3 guan4 || Victor Wong (englischer Name), Huang Pin Guan (Taiwanischer Pop-Sänger)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |黃品冠}} || huang2 pin3 guan4 || (traditionelle Schreibweise von 黄品冠), Victor Wong (englischer Name), Huang Pin Guan (Taiwanischer Pop-Sänger)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸡冠花}} || ji1 guan1 hua1 || Silber-Brandschopf, Hahnenkamm (lat: Celosia argentea, eine Pflanze)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |雞冠花}} || ji1 guan1 hua1 || (traditionelle Schreibweise von 鸡冠花), Silber-Brandschopf, Hahnenkamm (lat: Celosia argentea, eine Pflanze)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |陈冠希}} || chen2 guan4 xi1 || Edison Chen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |陳冠希}} || chen2 guan4 xi1 || (traditionelle Schreibweise von 陈冠希), Edison Chen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠名为}} || guan4 ming2 wei2 || den Namen tragen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠名為}} || guan4 ming2 wei2 || (traditionelle Schreibweise von 冠名为), den Namen tragen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |主教冠}} || zhu3 jiao4 guan4 || Mitra (Bischhofhut)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠军赛}} || guan4 jun1 sai4 || Meisterschaft, Meisterschaftskampf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |定冠词}} || ding4 guan4 ci2 || bestimmter Artikel (der, die, das) <Grammatik>
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |定冠詞}} || ding4 guan4 ci2 || (traditionelle Schreibweise von 定冠词), bestimmter Artikel (der, die, das) <Grammatik>
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |戴桂冠}} || dai4 gui4 guan1 || preisgekrönt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠海豹}} || guan4 hai3 bao4 || Mützenrobbe, auch Klappmütze (lat: Cystophora cristata)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠心病}} || guan1 xin1 bing4 || koronare Herzerkrankung, Kreislaufkrankheit, Herzkranzgefäßerkrankung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠轮动物}} || guan4 lun2 dong4 wu4 || Lophotrochozoen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠輪動物}} || guan4 lun2 dong4 wu4 || (traditionelle Schreibweise von 冠轮动物), Lophotrochozoen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |使戴桂冠}} || shi3 dai4 gui4 guan1 || preiskrönen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |秋季冠军}} || qiu1 ji4 guan4 jun1 || Herbstmeister, Herbstmeisterschaft
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |秋季冠軍}} || qiu1 ji4 guan4 jun1 || (traditionelle Schreibweise von 秋季冠军), Herbstmeister, Herbstmeisterschaft
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不定冠词}} || bu4 ding4 guan4 ci2 || unbestimmter Artikel (ein, eine) <Grammatik>
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不定冠詞}} || bu4 ding4 guan4 ci2 || (traditionelle Schreibweise von 不定冠词), unbestimmter Artikel (ein, eine) <Grammatik>
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鸟的冠毛}} || niao3 de5 guan4 mao2 || Haarknoten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鳥的冠毛}} || niao3 de5 guan4 mao2 || (traditionelle Schreibweise von 鸟的冠毛), Haarknoten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠状病毒}} || guan4 zhuang4 bing4 du2 || Coronavirus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠状齿轮}} || guan4 zhuang4 chi3 lun1 || Tellerrad
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠军称号}} || guan4 jun1 cheng1 hao4 || Championat, Meistertitel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠軍稱號}} || guan4 jun1 cheng1 hao4 || (traditionelle Schreibweise von 冠军称号), Championat, Meistertitel
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |三料冠军}} || san1 liao4 guan4 jun1 || Triple
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |三料冠軍}} || san1 liao4 guan4 jun1 || (traditionelle Schreibweise von 三料冠军), Triple
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |张冠李戴}} || zhang1 guan1 li3 dai4 || verwechseln
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |張冠李戴}} || zhang1 guan1 li3 dai4 || (traditionelle Schreibweise von 张冠李戴), verwechseln
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |衣冠不整}} || yi1 guan1 bu4 zheng3 || zerzausen, verwahrlost
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |业界之冠}} || ye4 jie4 zhi1 guan4 || Branchenprimus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |世界冠军}} || shi4 jie4 guan4 jun1 || Weltmeister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |世界冠軍}} || shi4 jie4 guan4 jun1 || (traditionelle Schreibweise von 世界冠军), Weltmeister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠状血管}} || guan4 zhuang4 xie3 guan3 || Koronargefäß
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |弹冠相庆}} || tan2 guan1 xiang1 qing4 || sich zu einer Beförderung im Amt oder einer Ernennung gratulieren
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |头有羽冠}} || tou2 you3 yu3 guan4 || Blauhäher
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |頭有羽冠}} || tou2 you3 yu3 guan4 || (traditionelle Schreibweise von 头有羽冠), Blauhäher
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |怒发冲冠}} || nu4 fa3 chong1 guan1 || vor Wut kochen, in die Luft gehen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |奥运冠军}} || ao4 yun4 guan4 jun1 || Olympiasieger
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |奧運冠軍}} || ao4 yun4 guan4 jun1 || (traditionelle Schreibweise von 奥运冠军), Olympiasieger
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |世冠汽车}} || shi4 guan4 qi4 che1 || Scania(Wirtsch)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |世冠汽車}} || shi4 guan4 qi4 che1 || (traditionelle Schreibweise von 世冠汽车), Scania(Wirtsch)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠带鱼科}} || guan4 dai4 yu2 ke1 || Schopffische, Schopfköpfe, Einhornfische (eine Fischfamilie, lat: Lophotidae)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠帶魚科}} || guan4 dai4 yu2 ke1 || (traditionelle Schreibweise von 冠带鱼科), Schopffische, Schopfköpfe, Einhornfische (eine Fischfamilie, lat: Lophotidae)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |丰田皇冠}} || feng1 tian2 huang2 guan1 || Toyota Crown
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |行业之冠}} || hang2 ye4 zhi1 guan4 || Branchenprimus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |欧洲冠军}} || ou1 zhou1 guan4 jun1 || Europameister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |歐洲冠軍}} || ou1 zhou1 guan4 jun1 || (traditionelle Schreibweise von 欧洲冠军), Europameister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |桂冠诗人}} || gui4 guan4 shi1 ren2 || Poet Laureate
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |桂冠詩人}} || gui4 guan4 shi1 ren2 || (traditionelle Schreibweise von 桂冠诗人), Poet Laureate
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |优孟之衣冠}} || you1 meng4 zhi1 yi1 guan4 || die Verkleidung des Schauspielers Meng; sich verkleiden
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |篮球冠军赛}} || lan2 qiu2 guan4 jun1 sai4 || Basketball-Meisterschaft
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |奥运会冠军}} || ao4 yun4 hui4 guan4 jun1 || Olympiasieger
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |奧運會冠軍}} || ao4 yun4 hui4 guan4 jun1 || (traditionelle Schreibweise von 奥运会冠军), Olympiasieger
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |欧洲冠军赛}} || ou1 zhou1 guan4 jun1 sai4 || Europameisterschaft
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |黑冠长臂猿}} || hei1 guan4 chang2 bi4 yuan2 || Westlicher Schwarzer Schopfgibbon
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |黑冠長臂猿}} || hei1 guan4 chang2 bi4 yuan2 || (traditionelle Schreibweise von 黑冠长臂猿), Westlicher Schwarzer Schopfgibbon
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |世界杯冠军}} || shi4 jie4 bei1 guan4 jun1 || Weltcupchampion, Welcupsieger, Weltcupgewinner, Weltcupsieg
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠军杯比赛}} || guan4 jun1 bei1 bi3 sai4 || Meisterschaftskampf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |皇冠公主号}} || huang2 guan1 gong1 zhu3 hao4 || Crown Princess (Kreuzfahrtschiff)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |皇冠公主號}} || huang2 guan1 gong1 zhu3 hao4 || (traditionelle Schreibweise von 皇冠公主号), Crown Princess (Kreuzfahrtschiff)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |世界出口冠军}} || shi4 jie4 chu1 kou3 guan4 jun1 || Exportweltmeister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |世界出口冠軍}} || shi4 jie4 chu1 kou3 guan4 jun1 || (traditionelle Schreibweise von 世界出口冠军), Exportweltmeister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |足球世界冠军}} || zu2 qiu2 shi4 jie4 guan4 jun1 || Fußball Weltmeister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |足球世界冠軍}} || zu2 qiu2 shi4 jie4 guan4 jun1 || (traditionelle Schreibweise von 足球世界冠军), Fußball Weltmeister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |德国足球冠军}} || de2 guo2 zu2 qiu2 guan4 jun1 || Deutscher Fußballmeister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |德國足球冠軍}} || de2 guo2 zu2 qiu2 guan4 jun1 || (traditionelle Schreibweise von 德国足球冠军), Deutscher Fußballmeister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |英格兰足球冠军联赛}} || ying1 ge2 lan2 zu2 qiu2 guan4 jun1 lian2 sai4 || Football League Championship
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |欧洲冠军赛出线资格}} || ou1 zhou1 guan4 jun1 sai4 chu1 xian4 zi1 ge2 || EM-Qualifikation, Europameisterschaft Qualifikation
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冠以集团名称的企业}} || guan4 yi3 ji2 tuan2 ming2 cheng1 de5 qi3 ye4 || Firmen, die die Bezeichnung "Gruppe" im Namen tragen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |德国足球联合会决赛冠军}} || de2 guo2 zu2 qiu2 lian2 he2 hui4 jue2 sai4 guan4 jun1 || DFB-Pokalfinale
|}
=== 復 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復蒲}} || fu4 pu2 || (traditionelle Schreibweise von 复蒲), Fupu
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復健}} || fu4 jian4 || (traditionelle Schreibweise von 复健), Rehabilitation, Rehabilitierung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |平復}} || ping2 fu4 || (traditionelle Schreibweise von 平复), sich normalisieren, abklingen, zur Ruhe kommen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復轉}} || fu4 zhuan3 || (traditionelle Schreibweise von 复转), demobilisieren
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復婚}} || fu4 hun1 || (traditionelle Schreibweise von 复婚), Wiedervermählung nach zwischenzeitlicher Scheidung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復印}} || fu4 yin4 || (traditionelle Schreibweise von 复印), kopieren, vervielfältigen, Abzüge machen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活}} || fu4 huo2 || (traditionelle Schreibweise von 复活), Auferstehung, Wiederbelebung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復數}} || fu4 shu4 || (traditionelle Schreibweise von 复数), Plural, Mehrzahl <Grammatik>
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |往復}} || wang3 fu4 || (traditionelle Schreibweise von 往复), erwidern, hin- und herbewegen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復用}} || fu4 yong4 || (traditionelle Schreibweise von 复用), gleichzeitig sendend
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |回復}} || hui2 fu4 || (traditionelle Schreibweise von 回复), "Re:", "Reply, Response" (bei E-Mails), Replik, Zuschrift, zurückgeben
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復件}} || fu4 jian4 || (traditionelle Schreibweise von 复件), Gegenstück
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復習}} || fu4 xi2 || (traditionelle Schreibweise von 复习), Wiederholung, nachbereiten, nochmal durchgehen, wiederholen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復修}} || fu4 xiu1 || (traditionelle Schreibweise von 复修), nacharbeiten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復元}} || fu4 yuan2 || (traditionelle Schreibweise von 复元), Besserung, Genesung, Gesundung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |報復}} || bao4 fu4 || (traditionelle Schreibweise von 报复), Repressalie, Rache nehmen, sich rächen, Repressalien ergreifen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |置復}} || zhi4 fu4 || (traditionelle Schreibweise von 置复), wiederholen (wiederholt abspielen)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復量}} || fu4 liang4 || (traditionelle Schreibweise von 复量), komplexe Größe
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復姓}} || fu4 xing4 || (traditionelle Schreibweise von 复姓), zweisilbiger Familienname ( z.B. 司马)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |重復}} || chong2 fu4 || (traditionelle Schreibweise von 重复), wiederholen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復解}} || fu4 jie3 || (traditionelle Schreibweise von 复解), komplexe Lösung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復相}} || fu4 xiang1 || (traditionelle Schreibweise von 复相), mehrphasig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |康復}} || kang1 fu4 || (traditionelle Schreibweise von 康复), Aufkommen, Genesung, Rehabilitation, entdecken, wiederherstellen, gesunden
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復}} || hui1 fu4 || (traditionelle Schreibweise von 恢复), sich erholen, wiederherstellen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復興}} || fu4 xing1 || (traditionelle Schreibweise von 复兴), Wiederauferstehung, Wiederbelebung, Wiedererwachen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復位}} || fu4 wei4 || (traditionelle Schreibweise von 复位), Rückstellung, Reset, rückstellen, wieder einrenken
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復歸}} || fu4 gui1 || (traditionelle Schreibweise von 复归), Regress
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |批復}} || pi1 fu4 || (traditionelle Schreibweise von 批复), offizielle Antwort
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |修復}} || xiu1 fu4 || (traditionelle Schreibweise von 修复), etw. wieder instandsetzen, reparieren, restaurieren, wiederherstellen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |又復}} || you4 fu4 || (traditionelle Schreibweise von 又复), erneut
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |建復}} || jian4 fu4 || (traditionelle Schreibweise von 建复), Rehabilitation
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |收復}} || shou1 fu4 || (traditionelle Schreibweise von 收复), entdecken, wiederherstellen, Wiedereinnahme, wieder einnehmen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |康復中}} || kang1 fu4 zhong1 || (traditionelle Schreibweise von 康复中), bei der Genesung, beim Auskurieren, im Heilungsprozeß, sich dabei zu genesen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |光復鄉}} || guang1 fu4 xiang1 || (traditionelle Schreibweise von 光复乡), Kuangfu (Dorf in Taiwan)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復核人}} || fu4 he2 ren2 || (traditionelle Schreibweise von 复核人), Revisor
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復流形}} || fu4 liu2 xing2 || (traditionelle Schreibweise von 复流形), Komplexe Mannigfaltigkeit
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |反復地}} || fan3 fu4 de5 || (traditionelle Schreibweise von 反复地), wiederholen, wiederholt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |報復性}} || bao4 fu4 xing4 || (traditionelle Schreibweise von 报复性), vergelten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |未答復}} || wei4 da2 fu4 || (traditionelle Schreibweise von 未答复), unerwidert
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復期}} || hui1 fu4 qi1 || (traditionelle Schreibweise von 恢复期), Genesungszeit, Heilungzeit, Dauer der Heilung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復精梳}} || fu4 jing1 shu1 || (traditionelle Schreibweise von 复精梳), Nachkämmen (Textilwesen)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復仇者}} || fu4 chou2 zhe3 || (traditionelle Schreibweise von 复仇者), Rächer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活蛋}} || fu4 huo2 dan4 || (traditionelle Schreibweise von 复活蛋), Osterei
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |修復者}} || xiu1 fu4 zhe3 || (traditionelle Schreibweise von 修复者), Restaurator
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |可恢復}} || ke3 hui1 fu4 || (traditionelle Schreibweise von 可恢复), wieder herstellbar
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復印機}} || fu4 yin4 ji1 || (traditionelle Schreibweise von 复印机), fotokopierend
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復器}} || hui1 fu4 qi4 || (traditionelle Schreibweise von 恢复器), Wiederhersteller
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |朱邦復}} || zhu1 bang1 fu4 || (traditionelle Schreibweise von 朱邦复), Chu Bong-Foo
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |報復者}} || bao4 fu4 zhe3 || (traditionelle Schreibweise von 报复者), Rächer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不復雜}} || bu4 fu4 za2 || (traditionelle Schreibweise von 不复杂), unkompliziert
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節}} || fu4 huo2 jie2 || (traditionelle Schreibweise von 复活节), Ostern
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |早日康復}} || zao3 ri4 kang1 fu4 || (traditionelle Schreibweise von 早日康复), Gute Besserung!, (englisch: (to wish someone) Get well soon!)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復精神}} || hui1 fu4 jing1 shen2 || (traditionelle Schreibweise von 恢复精神), Erweckung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復習語法}} || fu4 xi2 yu3 fa3 || (traditionelle Schreibweise von 复习语法), Grammatische Wiederholungen, Wiederholungen der Grammatik, Grammatik wiederholen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |無以復加}} || wu2 yi3 fu4 jia1 || (traditionelle Schreibweise von 无以复加), auf's Äußerste, im höchsten Grad
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |往復運動}} || wang3 fu4 yun4 dong4 || (traditionelle Schreibweise von 往复运动), Hin- und Herbewegung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |自動恢復}} || zi4 dong4 hui1 fu4 || (traditionelle Schreibweise von 自动恢复), Spontanheilung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復興航空}} || fu4 xing1 hang2 kong1 || (traditionelle Schreibweise von 复兴航空), TransAsia Airways
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |信仰復興}} || xin4 yang3 fu4 xing1 || (traditionelle Schreibweise von 信仰复兴), Erweckung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復精力}} || hui1 fu4 jing1 li4 || (traditionelle Schreibweise von 恢复精力), stärken
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不能恢復}} || bu4 neng2 hui1 fu4 || (traditionelle Schreibweise von 不能恢复), unwiederbringlich
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |同語反復}} || tong2 yu3 fan3 fu4 || (traditionelle Schreibweise von 同语反复), tautologisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復制版本}} || fu4 zhi4 ban3 ben3 || (traditionelle Schreibweise von 复制版本), Faksimile
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復重建}} || hui1 fu4 chong2 jian4 || (traditionelle Schreibweise von 恢复重建), erneuern, wiederaufbauen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復體力}} || hui1 fu4 ti3 li4 || (traditionelle Schreibweise von 恢复体力), stärken
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |敬請回復}} || jing4 qing3 hui2 fu4 || (traditionelle Schreibweise von 敬请回复), um Antwort wird gebeten (u.A.w.g.)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |重復定位}} || chong2 fu4 ding4 wei4 || (traditionelle Schreibweise von 重复定位), umrüsten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |康復中心}} || kang1 fu4 zhong1 xin1 || (traditionelle Schreibweise von 康复中心), Rehabilitationszentrum
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |死灰復燃}} || si3 hui1 fu4 ran2 || (traditionelle Schreibweise von 死灰复燃), wie ein Phönix aus der Asche steigen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |经济復蘇}} || jing1 ji4 fu4 su1 || (traditionelle Schreibweise von 經济复苏), Erholung der Wirtschaft, Konjukturaufschwung, Konjukturwiederbelebung, Wirtschaftsaufschwung, Wirtschaftswiederbelebung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復健康}} || hui1 fu4 jian4 kang1 || (traditionelle Schreibweise von 恢复健康), wieder gesund werden, Gesundheit wiedererlangen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |光電復印}} || guang1 dian4 fu4 yin4 || (traditionelle Schreibweise von 光电复印), Fotokopie, Fotokopieren
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |謝謝回復}} || xie4 xie5 hui2 fu4 || (traditionelle Schreibweise von 谢谢回复), Danke für Ihre Antwort
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |電子復制}} || dian4 zi3 fu4 zhi4 || (traditionelle Schreibweise von 电子复制), elektronische Reproduktion
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復旦大學}} || fu4 dan4 da4 xue2 || (traditionelle Schreibweise von 复旦大学), Fudan-Universität
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |難以回復}} || nan2 yi3 hui2 fu4 || (traditionelle Schreibweise von 难以回复), nicht reduzierbar
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |肯定答復}} || ken3 ding4 da2 fu4 || (traditionelle Schreibweise von 肯定答复), dafür
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |修復工作}} || xiu1 fu4 gong1 zuo4 || (traditionelle Schreibweise von 修复工作), Instandsetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |承接復句}} || cheng2 jie1 fu4 ju4 || (traditionelle Schreibweise von 承接复句), sukzessiver Satz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節兔}} || fu4 huo2 jie2 tu4 || (traditionelle Schreibweise von 复活节兔), Osterhase
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |自動復位}} || zi4 dong4 fu4 wei4 || (traditionelle Schreibweise von 自动复位), Autonullung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復正常}} || hui1 fu4 zheng4 chang2 || (traditionelle Schreibweise von 恢复正常), wieder ins Lot kommen, normalisieren
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復合紙板}} || fu4 he2 zhi3 ban3 || (traditionelle Schreibweise von 复合纸板), kaschierter Karton
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不可恢復}} || bu4 ke3 hui1 fu4 || (traditionelle Schreibweise von 不可恢复), nicht erneuerbar, nicht recycelbar
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恢復青春}} || hui1 fu4 qing1 chun1 || (traditionelle Schreibweise von 恢复青春), grünen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復仇主義}} || fu4 chou2 zhu3 yi4 || (traditionelle Schreibweise von 复仇主义), Revanchismus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |康復醫院}} || kang1 fu4 yi1 yuan4 || (traditionelle Schreibweise von 康复医院), Rehabilitationsklinik
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一去不復返}} || yi1 qu4 bu4 fu4 fan3 || (traditionelle Schreibweise von 一去不复返), das kommt nicht wieder, ein für allemal vorbei, für immer vorbei
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節週末}} || fu4 huo2 jie2 zhou1 mo4 || (traditionelle Schreibweise von 复活节周末), Osterwochenende
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節彩蛋}} || fu4 huo2 jie2 cai3 dan4 || (traditionelle Schreibweise von 复活节彩蛋), Osterei, Ostereier
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |辦公復印機}} || ban4 gong1 fu4 yin4 ji1 || (traditionelle Schreibweise von 办公复印机), Bürokopierer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節假期}} || fu4 huo2 jie2 jia4 qi1 || (traditionelle Schreibweise von 复活节假期), Osterferien
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |大圖象復制}} || da4 tu2 xiang4 fu4 zhi4 || (traditionelle Schreibweise von 大图象复制), Großbildreproduktion
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |光電復印機}} || guang1 dian4 fu4 yin4 ji1 || (traditionelle Schreibweise von 光电复印机), Fotokopiergerät
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節快樂}} || fu4 huo2 jie2 kuai4 le4 || (traditionelle Schreibweise von 复活节快乐), Frohe Ostern!, Frohes Osterfest!
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |年復一年地}} || nian2 fu4 yi1 nian2 de5 || (traditionelle Schreibweise von 年复一年地), Jahr für Jahr
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一日復一日}} || yi1 ri4 fu4 yi1 ri4 || (traditionelle Schreibweise von 一日复一日), Tag für Tag, tagein und tagaus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |死而復興的}} || si3 er2 fu4 xing1 de5 || (traditionelle Schreibweise von 死而复兴的), wiederauferstanden
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節之夜}} || fu4 huo2 jie2 zhi1 ye4 || (traditionelle Schreibweise von 复活节之夜), Osternacht
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |亞麻布復合}} || ya4 ma2 bu4 fu4 he2 || (traditionelle Schreibweise von 亚麻布复合), leinenkaschiert
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節星期天}} || fu4 huo2 jie2 xing1 qi1 tian1 || (traditionelle Schreibweise von 复活节星期天), Ostersonntag
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |梯度復合材料}} || ti1 du4 fu4 he2 cai2 liao4 || (traditionelle Schreibweise von 梯度复合材料), abgestufter Verbundwerkstoff (表面材料和下面的材料是完全不一致的)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一次性復寫紙}} || yi1 ci4 xing4 fu4 xie3 zhi3 || (traditionelle Schreibweise von 一次性复写纸), Einmalkohlepapier
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |照相放大復制}} || zhao4 xiang4 fang4 da4 fu4 zhi4 || (traditionelle Schreibweise von 照相放大复制), Projektionsfotografie
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節星期一}} || fu4 huo2 jie2 xing1 qi1 yi1 || (traditionelle Schreibweise von 复活节星期一), Ostermontag
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |猶太復國主義}} || you2 tai4 fu4 guo2 zhu3 yi4 || (traditionelle Schreibweise von 犹太复国主义), Zionismus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |很快恢復過來}} || hen3 kuai4 hui1 fu4 guo4 lai2 || (traditionelle Schreibweise von 很快恢复过来), zurückschnappt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |按比例的復制}} || an4 bi3 li4 de5 fu4 zhi4 || (traditionelle Schreibweise von 按比例的复制), maßstabsgerechte Reproduktion
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復消色差透鏡}} || fu4 xiao1 se4 cha1 tou4 jing4 || (traditionelle Schreibweise von 复消色差透镜), apochromatisches Objektiv
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |可以重復列舉}} || ke3 yi3 zhong4 fu4 lie4 ju3 || (traditionelle Schreibweise von 可以重复列举), Mehrfachnennungen möglich
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |往復式發動機}} || wang3 fu4 shi4 fa1 dong4 ji1 || (traditionelle Schreibweise von 往复式发动机), Kolbenmaschine
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復了一次又一次}} || fu4 liao3 yi1 ci4 you4 yi1 ci4 || (traditionelle Schreibweise von 复了一次又一次), wurde immer und immer wieder wiederholt
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節計算表冊}} || fu4 huo2 jie2 ji4 suan4 biao3 ce4 || (traditionelle Schreibweise von 复活节计算表册), Osterdatum
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復活節前的星期六}} || fu4 huo2 jie2 qian2 de5 xing1 qi1 liu4 || (traditionelle Schreibweise von 复活节前的星期六), Ostersamstag
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |基督復臨安息日會}} || ji1 du1 fu4 lin2 an1 xi1 ri4 hui4 || (traditionelle Schreibweise von 基督复临安息日会), Siebenten-Tags-Adventisten(Philos)
|}
=== 履 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履约}} || lü3 yue1 || Erfüllung, Leistung; sein Wort halten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履約}} || lü3 yue1 || (traditionelle Schreibweise von 履约), Erfüllung, Leistung; sein Wort halten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |步履}} || bu4 lü3 || Gang, Gehen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履带}} || lü3 dai4 || Raupenkette
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履帶}} || lü3 dai4 || (traditionelle Schreibweise von 履带), Raupenkette
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履历}} || lü3 li4 || Lebenslauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履新}} || lü3 xin1 || einen neuen Posten übernehmen, neues Jahr feiern
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履行}} || lü3 xing2 || Ausführung, Erfüllung, erfüllen, ausführen || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履带架}} || lü3 dai4 jia4 || Raupe
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履帶架}} || lü3 dai4 jia4 || (traditionelle Schreibweise von 履带架), Raupe
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履历表}} || lü3 li4 biao3 || Lebenslauf (Bewerbung), Personalbogen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |陈履安}} || chen2 lü3 an1 || Chen Li-an
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |陳履安}} || chen2 lü3 an1 || (traditionelle Schreibweise von 陈履安), Chen Li-an
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |步履艱難}} || bu4 lü3 jian1 nan2 || (traditionelle Schreibweise von 步履艰难), beschwerlichen Schrittes, sich schleppen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履行诺言}} || lü3 xing2 nuo4 yan2 || ein Versprechen halten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履行条约}} || lü3 xing2 tiao2 yue1 || einen Vertrag erfüllen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履行條約}} || lü3 xing2 tiao2 yue1 || (traditionelle Schreibweise von 履行条约), einen Vertrag erfüllen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履行义务}} || lü3 xing2 yi4 wu4 || einer Verpflichtung nachkommen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |部分履行}} || bu4 fen5 lü3 xing2 || Teilentladung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履带车辆}} || lü3 dai4 che1 liang4 || Kettenfahrzeuge
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履帶車輛}} || lü3 dai4 che1 liang4 || (traditionelle Schreibweise von 履带车辆), Kettenfahrzeuge
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |郑人买履}} || zheng4 ren2 mai3 lü3 || sich selbst nicht vertrauen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |简要履历}} || jian3 yao4 lü3 li4 || kurzer Lebenslauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履中天皇}} || lü3 zhong1 tian1 huang2 || Richū
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |个人履历}} || ge4 ren2 lü3 li4 || Personalie
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |延迟履约}} || yan2 chi2 lü3 yue1 || Vertragserfüllung verzögern
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履带式车辆}} || lü3 dai4 shi4 che1 liang4 || Raupe
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履帶式車輛}} || lü3 dai4 shi4 che1 liang4 || (traditionelle Schreibweise von 履带式车辆), Raupe
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履行义务时}} || lü3 xing2 yi4 wu4 shi2 || einer terminlich festgelegte Verpflichtung nachkommen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |合同的履行}} || he2 tong5 de5 lü3 xing2 || Vertragsrealisierung, Erfüllung des Vertrags
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |半履带式车辆}} || ban4 lü3 dai4 shi4 che1 liang4 || Halbkettenfahrzeug
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |半履帶式車輛}} || ban4 lü3 dai4 shi4 che1 liang4 || (traditionelle Schreibweise von 半履带式车辆), Halbkettenfahrzeug
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履行海关手续}} || lü3 xing2 hai3 guan1 shou3 xu4 || abfertigen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履带式推土机}} || lü3 dai4 shi4 tui1 tu3 ji1 || Kettendozer, Planierraupe, Bulldozer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履帶式推土機}} || lü3 dai4 shi4 tui1 tu3 ji1 || (traditionelle Schreibweise von 履带式推土机), Kettendozer, Planierraupe, Bulldozer
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履带式拖拉机}} || lü3 dai4 shi4 tuo1 la1 ji1 || Raupenschlepper
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |履帶式拖拉機}} || lü3 dai4 shi4 tuo1 la1 ji1 || (traditionelle Schreibweise von 履带式拖拉机), Raupenschlepper
|}
=== 阈 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |阈值}} || yu4 zhi2 || Schwellenpotenzial, Threshold, Schwellenwert, Ansprechschwellungswert
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |痛阈}} || tong4 yu4 || Schmerzschwelle
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |视阈}} || shi4 yu4 || Gesichtsfeld
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |阈限}} || yu4 xian4 || (psychology) threshold, liminal
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |听阈}} || ting1 yu4 || audibility threshold
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |阈电位}} || yu4 dian4 wei4 || Schwellenpotenzial
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |调节阈值}} || tiao2 jie2 yu4 zhi2 || Regelschwelle
|}
== Sätze ==
=== 幢 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |哀幢房子里住了两家人家。}} || ai1 chuang2 fang2 zi5 li3 zhu4 le5 liang3 jia1 ren2 jia1 。|| In dem Haus wohnen zwei Familien. (Shanghai, [https://tatoeba.org/eng/sentences/show/774264 Tatoeba] [https://tatoeba.org/eng/user/profile/U2FS U2FS] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你进这幢楼的时候是几点?}} || ni3 jin4 zhe4/zhei4 chuang2 lou2 de5 shi2 hou4 shi4 ji1 dian3 ?|| Wie spät war es, als Sie das Gebäude betraten? (Mandarin, [https://tatoeba.org/eng/sentences/show/8517159 Tatoeba] [https://tatoeba.org/eng/user/profile/gumblex gumblex] [https://tatoeba.org/eng/user/profile/samueldora samueldora])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我们面前的这幢高楼是什么?}} || wo3 men5 mian4 qian2 de5 zhe4/zhei4 chuang2 gao1 lou2 shi4 shi2 me5 ?|| Was ist das für ein großes Gebäude vor uns? (Mandarin, [https://tatoeba.org/eng/sentences/show/333567 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Espi Espi])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我一个人住在这幢房子里。}} || wo3 yi1 ge4 ren2 zhu4 zai4 zhe4/zhei4 chuang2 fang2 zi5 li3 。|| Ich lebe alleine in diesem Haus. (Mandarin, [https://tatoeba.org/eng/sentences/show/380729 Tatoeba] [https://tatoeba.org/eng/user/profile/sherryyyf sherryyyf] [https://tatoeba.org/eng/user/profile/Wolf Wolf])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这幢红屋顶的房子是汤姆的。}} || zhe4/zhei4 chuang2 hong2 wu1 ding3 de5 fang2 zi5 shi4 tang1 mu3 de5 。|| Das Haus mit dem roten Dach ist Toms. (Mandarin, [https://tatoeba.org/eng/sentences/show/688350 Tatoeba] [https://tatoeba.org/eng/user/profile/offdare offdare] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那幢绿色屋顶的建筑是什么?}} || na4/nei4 chuang2 lü4 se4 wu1 ding3 de5 jian4 zhu2 shi4 shi2 me5 ?|| Was ist dieses Gebäude mit dem grünen Dach? (Mandarin, [https://tatoeba.org/eng/sentences/show/904472 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/Tono Tono])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那幢房子看起来被遗弃了。}} || na4/nei4 chuang2 fang2 zi5 kan4 qi3 lai2 bei4 yi2 qi4 le5 。|| That house appears deserted. (Mandarin, [https://tatoeba.org/eng/sentences/show/1394859 Tatoeba] [https://tatoeba.org/eng/user/profile/mtdot mtdot] [https://tatoeba.org/eng/user/profile/CM CM])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |看那边那幢高楼。}} || kan4 na4/nei4 bian1 na4/nei4 chuang2 gao1 lou2 。|| Sieh dir das große Gebäude dort drüben an. (Mandarin, [https://tatoeba.org/eng/sentences/show/346806 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Wauzl Wauzl])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这幢楼以前是医院。}} || zhe4/zhei4 chuang2 lou2 yi3 qian2 shi4 yi1 yuan4 。|| Dieses Gebäude war früher mal ein Krankenhaus. (Mandarin, [https://tatoeba.org/eng/sentences/show/791618 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Vortarulo Vortarulo])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这是幢老楼。}} || zhe4/zhei4 shi4 chuang2 lao3 lou2 。|| Das ist ein altes Gebäude. (Mandarin, [https://tatoeba.org/eng/sentences/show/8511512 Tatoeba] [https://tatoeba.org/eng/user/profile/gumblex gumblex] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那是幢高楼,不是吗?}} || na4/nei4 shi4 chuang2 gao1 lou2 , bu4 shi4 ma5 ?|| Das ist ein Hochhaus, stimmt’s? (Mandarin, [https://tatoeba.org/eng/sentences/show/333840 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我的办公室在那幢灰色的六层楼的四楼。}} || wo3 de5 ban4 gong1 shi4 zai4 na4/nei4 chuang2 hui1 se4 de5 liu4 ceng2 lou2 de5 si4 lou2 。|| Mein Büro befindet sich im dritten Obergeschoss des grauen, sechsgeschossigen Gebäudes dort. (Mandarin, [https://tatoeba.org/eng/sentences/show/8500070 Tatoeba] [https://tatoeba.org/eng/user/profile/maxine maxine] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|}
=== 冠 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |今天下午,世界卫生组织证实了3000个新型冠状病毒病例,其中有100人死亡。}} || jin1 tian1 xia4 wu3 , shi4 jie4 wei4 sheng1 zu3 zhi1 zheng4 shi2 le5 3000 ge4 xin1 xing2 guan1/guan4 zhuang4 bing4 du2 bing4 li4 , qi2 zhong1/zhong4 you3 100 ren2 si3 wang2 。|| Heute Nachmittag hat die Weltgesundheitsorganisation dreitausend Fälle des neuen Coronavirus bestätigt, darunter einhundert Tote. (Mandarin, [https://tatoeba.org/eng/sentences/show/8558437 Tatoeba] [https://tatoeba.org/eng/user/profile/slo_oth slo_oth] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他在国际象棋比赛中取得了冠军。}} || ta1 zai4 guo2 ji4 xiang4 qi2 bi4 sai4 zhong1/zhong4 qu3 de2/de5/dei3 le5 guan1/guan4 jun1 。|| He carried off the first prize at the chess tournament. (Mandarin, [https://tatoeba.org/eng/sentences/show/419252 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |大家都渴望知道前冠军得主发生了什么。}} || da4 jia1 dou1/du1 ke3 wang4 zhi1 dao4 qian2 guan1/guan4 jun1 de2/de5/dei3 zhu3 fa1 sheng1 le5 shi2 me5 。|| Everyone is anxious to know what has become of the former champion. (Mandarin, [https://tatoeba.org/eng/sentences/show/829691 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/CM CM])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |只有一个人能成为世界冠军。问题是:会是谁呢?}} || zhi3 you3 yi1 ge4 ren2 neng2 cheng2 wei2/wei4 shi4 jie4 guan1/guan4 jun1 。 wen4 ti2 shi4 : hui4 shi4 shei2 ne5 ?|| Nur einer wird Weltmeister. Die Frage ist, wie heißt er? (Mandarin, [https://tatoeba.org/eng/sentences/show/3367342 Tatoeba] [https://tatoeba.org/eng/user/profile/go_oo go_oo] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我和他竞争冠军。}} || wo3 he2/he4/huo2 ta1 jing4 zheng1 guan1/guan4 jun1 。|| I competed with him for the championship. (Mandarin, [https://tatoeba.org/eng/sentences/show/842489 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |新冠病毒很危险的。}} || xin1 guan1/guan4 bing4 du2 hen3 wei1 xian3 de5 。|| The coronavirus is dangerous. (Mandarin, [https://tatoeba.org/eng/sentences/show/8854355 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Amastan Amastan])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这里有个皇冠。}} || zhe4/zhei4 li3 you3 ge4 huang2 guan1/guan4 。|| Hier gibt es eine Krone. (Mandarin, [https://tatoeba.org/eng/sentences/show/10273840 Tatoeba] [https://tatoeba.org/eng/user/profile/miaojiandao miaojiandao] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我在看亚冠比赛。}} || wo3 zai4 kan4 ya4 guan1/guan4 bi4 sai4 。|| Ich schaue gerade die Asienmeisterschaft. (Mandarin, [https://tatoeba.org/eng/sentences/show/6760110 Tatoeba] [https://tatoeba.org/eng/user/profile/xjjAstrus xjjAstrus] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |新冠病毒是什么?}} || xin1 guan1/guan4 bing4 du2 shi4 shi2 me5 ?|| What's coronavirus? (Mandarin, [https://tatoeba.org/eng/sentences/show/8904341 Tatoeba] [https://tatoeba.org/eng/user/profile/iiujik iiujik] [https://tatoeba.org/eng/user/profile/Amastan Amastan])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这个音节有一个前置冠音。}} || zhe4/zhei4 ge4 yin1 jie2 you3 yi1 ge4 qian2 zhi4 guan1/guan4 yin1 。|| Diese Silbe hat einen koronalen Anlaut. (Mandarin, [https://tatoeba.org/eng/sentences/show/5994645 Tatoeba] [https://tatoeba.org/eng/user/profile/xjjAstrus xjjAstrus] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |“新冠的真相是什么?”—“谁知道呢?”}} || “ xin1 guan1/guan4 de5 zhen1 xiang1/xiang4 shi4 shi2 me5 ?”—“ shei2 zhi1 dao4 ne5 ?”|| „Was ist die Wahrheit über das Coronavirus?“ – „Wer weiß das schon?“ (Mandarin, [https://tatoeba.org/eng/sentences/show/10023026 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/maaster maaster])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |這個音節有一個前置冠音。}} || zhe4/zhei4 ge4 yin1 jie2 you3 yi1 ge4 qian2 zhi4 guan1/guan4 yin1 。|| Diese Silbe hat einen koronalen Anlaut. (Mandarin, [https://tatoeba.org/eng/sentences/show/5994645 Tatoeba] [https://tatoeba.org/eng/user/profile/xjjAstrus xjjAstrus] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|}
=== 復 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |别担心,我已经完全康復了。}} || bie2 担 xin1 , wo3 yi3 jing4 wan2 quan2 kang1 復 le5 。|| Mach dir keine Sorgen! Ich bin wieder völlig gesund. (Mandarin, [https://tatoeba.org/eng/sentences/show/779845 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/leonor789 leonor789])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她从她父亲过世的震惊中恢復了。}} || ta1 cong2 ta1 fu4 qin1 guo4 shi4 de5 zhen4 jing1 zhong1/zhong4 hui1 復 le5 。|| Sie hatte sich wieder vom Schock über den Tod ihres Vaters erholt. (Mandarin, [https://tatoeba.org/eng/sentences/show/907263 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/AC AC])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你兩三天就會回復健康了。}} || ni3 liang3 san1 tian1 jiu4 hui4 hui2 復 jian4 kang1 le5 。|| You'll be all right again in a couple of days. (Mandarin, [https://tatoeba.org/eng/sentences/show/359016 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一場春雨使花朵回復了生氣。}} || yi1 chang3 chun1 yu3 shi3/shi4 hua1 duo3 hui2 復 le5 sheng1 qi4 。|| A spring rain revived the flower. (Mandarin, [https://tatoeba.org/eng/sentences/show/342766 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不久后,他恢復了健康。}} || bu4 jiu3 hou4 , ta1 hui1 復 le5 jian4 kang1 。|| Binnen Kurzem genas er. (Mandarin, [https://tatoeba.org/eng/sentences/show/768299 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你两三天就会回復健康了。}} || ni3 liang3 san1 tian1 jiu4 hui4 hui2 復 jian4 kang1 le5 。|| You'll be all right again in a couple of days. (Mandarin, [https://tatoeba.org/eng/sentences/show/359016 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他有任何復原的机会吗?}} || ta1 you3 ren4 he2 復 yuan2 de5 ji1 hui4 ma5 ?|| Hat er eine Aussicht auf Genesung? (Mandarin, [https://tatoeba.org/eng/sentences/show/893998 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一场春雨使花朵回復了生气。}} || yi1 chang3 chun1 yu3 shi3/shi4 hua1 duo3 hui2 復 le5 sheng1 qi4 。|| A spring rain revived the flower. (Mandarin, [https://tatoeba.org/eng/sentences/show/342766 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你很快就会康復的。}} || ni3 hen3 kuai4 jiu4 hui4 kang1 復 de5 。|| Du wirst schnell gesund werden. (Mandarin, [https://tatoeba.org/eng/sentences/show/10305851 Tatoeba] [https://tatoeba.org/eng/user/profile/DaoSeng DaoSeng] [https://tatoeba.org/eng/user/profile/esocom esocom])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你很快就會康復的。}} || ni3 hen3 kuai4 jiu4 hui4 kang1 復 de5 。|| Du wirst schnell gesund werden. (Mandarin, [https://tatoeba.org/eng/sentences/show/10305851 Tatoeba] [https://tatoeba.org/eng/user/profile/DaoSeng DaoSeng] [https://tatoeba.org/eng/user/profile/esocom esocom])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你必须对你的康復有耐心。}} || ni3 bi4 xu1 dui4 ni3 de5 kang1 復 you3 nai4 xin1 。|| You have to be patient about your recovery. (Mandarin, [https://tatoeba.org/eng/sentences/show/775424 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/jayefes65 jayefes65])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復原需要花很长的时间吗?}} || 復 yuan2 xu1 yao4 hua1 hen3 chang2/zhang3 de5 shi2 jian1 ma5 ?|| Will it take long to recover? (Mandarin, [https://tatoeba.org/eng/sentences/show/872178 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不久後,他恢復了健康。}} || bu4 jiu3 hou4 , ta1 hui1 復 le5 jian4 kang1 。|| Binnen Kurzem genas er. (Mandarin, [https://tatoeba.org/eng/sentences/show/768299 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |復原需要花很長的時間嗎?}} || 復 yuan2 xu1 yao4 hua1 hen3 chang2/zhang3 de5 shi2 jian1 ma5 ?|| Will it take long to recover? (Mandarin, [https://tatoeba.org/eng/sentences/show/872178 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |希望她早日康復。}} || xi1 wang4 ta1 zao3 ri4 kang1 復。|| Ich hoffe, dass es ihr bald besser geht. (Mandarin, [https://tatoeba.org/eng/sentences/show/337306 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她很快会康復的。}} || ta1 hen3 kuai4 hui4 kang1 復 de5 。|| Es wird ihr bald wieder gut gehen. (Mandarin, [https://tatoeba.org/eng/sentences/show/363989 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Zaghawa Zaghawa])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你必須對你的康復有耐心。}} || ni3 bi4 xu1 dui4 ni3 de5 kang1 復 you3 nai4 xin1 。|| You have to be patient about your recovery. (Mandarin, [https://tatoeba.org/eng/sentences/show/775424 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/jayefes65 jayefes65])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他有任何復原的機會嗎?}} || ta1 you3 ren4 he2 復 yuan2 de5 ji1 hui4 ma5 ?|| Hat er eine Aussicht auf Genesung? (Mandarin, [https://tatoeba.org/eng/sentences/show/893998 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |夫復何求?}} || fu2 復 he2 qiu2 ?|| What more could I ask for? (klassisch, [https://tatoeba.org/eng/sentences/show/6107116 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她很快會康復的。}} || ta1 hen3 kuai4 hui4 kang1 復 de5 。|| Es wird ihr bald wieder gut gehen. (Mandarin, [https://tatoeba.org/eng/sentences/show/363989 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Zaghawa Zaghawa])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |病人逐渐康復了。}} || bing4 ren2 zhu2 jian1/jian4 kang1 復 le5 。|| Dem Patienten ging es nach und nach besser. (Mandarin, [https://tatoeba.org/eng/sentences/show/347412 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Alois Alois])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那隻狗日復一日地等待著主人的歸來。}} || na4/nei4 zhi1 gou3 ri4 復 yi1 ri4 de4/di4 deng3 dai1 zhao1/zhu4/zhuo2 zhu3 ren2 de5 gui1 lai2 。|| Der Hund wartete Tag für Tag auf die Rückkehr seines Herrchens. (Mandarin, [https://tatoeba.org/eng/sentences/show/372168 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Hans_Adler Hans_Adler])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |過了六個月,他的腿便治好,回復正常了。}} || guo4 le5 liu4 ge4 yue4 , ta1 de5 tui3 bian4 zhi4 hao3 , hui2 復 zheng4 chang2 le5 。|| After a six month period, his leg was healed and is normal again. (Mandarin, [https://tatoeba.org/eng/sentences/show/452383 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我很高兴他们修復了暖气系统,但现在太热了。}} || wo3 hen3 gao1 xing1/xing4 ta1 men5 xiu1 復 le5 nuan3 qi4 xi4 tong3 , dan4 xian4 zai4 tai4 re4 le5 。|| Ich bin froh, dass sie die Heizung repariert haben, jetzt ist es aber zu heiß. (Mandarin, [https://tatoeba.org/eng/sentences/show/830355 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/raggione raggione])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |早日康復!}} || zao3 ri4 kang1 復!|| Gute Besserung! (Mandarin, [https://tatoeba.org/eng/sentences/show/1541652 Tatoeba] [https://tatoeba.org/eng/user/profile/menyo menyo] [https://tatoeba.org/eng/user/profile/enteka enteka])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |祝令尊早日康復。}} || zhu4 ling4 zun1 zao3 ri4 kang1 復。|| Ich wünsche Ihrem Vater eine baldige Genesung. (Mandarin, [https://tatoeba.org/eng/sentences/show/498450 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那个古老的传统已经不復存在了。}} || na4/nei4 ge4 gu3 lao3 de5 chuan2/zhuan4 tong3 yi3 jing4 bu4 復 cun2 zai4 le5 。|| Diese alte Tradition ist verschwunden. (Mandarin, [https://tatoeba.org/eng/sentences/show/361690 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Eldad Eldad])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |老师再次恢復健康了。}} || lao3 shi1 zai4 ci4 hui1 復 jian4 kang1 le5 。|| The teacher got quite well again. (Mandarin, [https://tatoeba.org/eng/sentences/show/802483 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我再看一次《王子復仇記》,加起來一共就看過三次了。}} || wo3 zai4 kan4 yi1 ci4 《 wang2 zi5 復仇 ji4 》, jia1 qi3 lai2 yi1 gong4 jiu4 kan4 guo4 san1 ci4 le5 。|| I will have read Hamlet three times if I read it again. (Mandarin, [https://tatoeba.org/eng/sentences/show/729503 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CM CM])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |死亡之後你便不會再復活。你不能死過之後又重回生命。如果你以為那會發生,你並非真正死去。}} || si3 wang2 zhi1 hou4 ni3 bian4 bu4 hui4 zai4 復 huo2 。 ni3 bu4 neng2 si3 guo4 zhi1 hou4 you4 chong2/zhong4 hui2 sheng1 ming4 。 ru2 guo3 ni3 yi3 wei2/wei4 na4/nei4 hui4 fa1 sheng1 , ni3 bing4 fei1 zhen1 zheng4 si3 qu4 。|| Death is the point at which you can't be alive again. You can't die and then come back to life. If you think that happened, you weren't really dead. (Mandarin, [https://tatoeba.org/eng/sentences/show/1233790 Tatoeba] [https://tatoeba.org/eng/user/profile/tsayng tsayng] [https://tatoeba.org/eng/user/profile/Zifre Zifre])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我再看一次《王子復仇记》,加起来一共就看过三次了。}} || wo3 zai4 kan4 yi1 ci4 《 wang2 zi5 復仇 ji4 》, jia1 qi3 lai2 yi1 gong4 jiu4 kan4 guo4 san1 ci4 le5 。|| I will have read Hamlet three times if I read it again. (Mandarin, [https://tatoeba.org/eng/sentences/show/729503 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CM CM])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |据说耶穌曾经令一个死人復活。}} || ju4 shuo1 ye1 su1 ceng2 jing4 ling4 yi1 ge4 si3 ren2 復 huo2 。|| Von Jesus wird gesagt, er hätte einen Mann von den Toten auferweckt. (Mandarin, [https://tatoeba.org/eng/sentences/show/567346 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |死亡之后你便不会再復活。你不能死过之后又重回生命。如果你以为那会发生,你并非真正死去。}} || si3 wang2 zhi1 hou4 ni3 bian4 bu4 hui4 zai4 復 huo2 。 ni3 bu4 neng2 si3 guo4 zhi1 hou4 you4 chong2/zhong4 hui2 sheng1 ming4 。 ru2 guo3 ni3 yi3 wei2/wei4 na4/nei4 hui4 fa1 sheng1 , ni3 bing4 fei1 zhen1 zheng4 si3 qu4 。|| Death is the point at which you can't be alive again. You can't die and then come back to life. If you think that happened, you weren't really dead. (Mandarin, [https://tatoeba.org/eng/sentences/show/1233790 Tatoeba] [https://tatoeba.org/eng/user/profile/tsayng tsayng] [https://tatoeba.org/eng/user/profile/Zifre Zifre])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |随著文艺復兴,学院派的想法被积极的想法取而代之了。}} || sui2 zhao1/zhu4/zhuo2 wen2 yi4 復 xing1/xing4 , xue2 yuan4 pai4 de5 xiang3 fa3 bei4 ji1 ji2 de5 xiang3 fa3 qu3 er2 dai4 zhi1 le5 。|| With Renaissance, scholastic ideas gave place to positive ideas. (Mandarin, [https://tatoeba.org/eng/sentences/show/810029 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这种荒谬的迷信已不復存在了。}} || zhe4/zhei4 chong2/zhong3/zhong4 huang1 miu4 de5 迷 xin4 yi3 bu4 復 cun2 zai4 le5 。|| Einen solchen lächerlichen Aberglauben gibt es nicht mehr. (Mandarin, [https://tatoeba.org/eng/sentences/show/349714 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Tamy Tamy])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |老師再次恢復健康了。}} || lao3 shi1 zai4 ci4 hui1 復 jian4 kang1 le5 。|| The teacher got quite well again. (Mandarin, [https://tatoeba.org/eng/sentences/show/802483 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |要很長的時間才能恢復嗎?}} || yao4 hen3 chang2/zhang3 de5 shi2 jian1 cai2 neng2 hui1 復 ma5 ?|| Will it take long to recover? (Mandarin, [https://tatoeba.org/eng/sentences/show/872171 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |無知何復道哉。}} || wu2 zhi1 he2 復 dao4 zai1 。|| Ich weiß nicht, was ich sonst noch sagen soll. (klassisch, [https://tatoeba.org/eng/sentences/show/2710299 Tatoeba] [https://tatoeba.org/eng/user/profile/shanghainese shanghainese] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我很抱歉这麼迟才回復。}} || wo3 hen3 bao4 qian4 zhe4/zhei4 me5 chi2/zhi4 cai2 hui2 復。|| I'm sorry for the delay in responding. (Mandarin, [https://tatoeba.org/eng/sentences/show/801381 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |要很长的时间才能恢復吗?}} || yao4 hen3 chang2/zhang3 de5 shi2 jian1 cai2 neng2 hui1 復 ma5 ?|| Will it take long to recover? (Mandarin, [https://tatoeba.org/eng/sentences/show/872171 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |过了六个月,他的腿便治好,回復正常了。}} || guo4 le5 liu4 ge4 yue4 , ta1 de5 tui3 bian4 zhi4 hao3 , hui2 復 zheng4 chang2 le5 。|| After a six month period, his leg was healed and is normal again. (Mandarin, [https://tatoeba.org/eng/sentences/show/452383 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那隻狗日復一日地等待著主人的归来。}} || na4/nei4 zhi1 gou3 ri4 復 yi1 ri4 de4/di4 deng3 dai1 zhao1/zhu4/zhuo2 zhu3 ren2 de5 gui1 lai2 。|| Der Hund wartete Tag für Tag auf die Rückkehr seines Herrchens. (Mandarin, [https://tatoeba.org/eng/sentences/show/372168 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Hans_Adler Hans_Adler])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |谨待復信。}} || jin3 dai1 復 xin4 。|| I am looking forward to hearing from you. (Mandarin, [https://tatoeba.org/eng/sentences/show/7753565 Tatoeba] [https://tatoeba.org/eng/user/profile/Leolaaziano Leolaaziano] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |聖人復起,必從吾言矣。}} || sheng4 ren2 復 qi3 , bi4 cong2 wu2 yan2 yi3 。|| When a Sage shall again arise, he will certainly follow my words. (klassisch, [https://tatoeba.org/eng/sentences/show/911910 Tatoeba] [https://tatoeba.org/eng/user/profile/shanghainese shanghainese])
|}
=== 履 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |军人必须履行他们的命令。}} || jun1 ren2 bi4 xu1 lü3 hang2/xing2 ta1 men5 de5 ming4 ling4 。|| Soldaten müssen Befehle ausführen. (Mandarin, [https://tatoeba.org/eng/sentences/show/798281 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Sudajaengi Sudajaengi])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |它们主要的看法其中也有“没有西装革履也可以很正经”。}} || ta1/tuo2 men5 zhu3 yao4 de5 kan4 fa3 qi2 zhong1/zhong4 ye3 you3 “ mei2/mo4 you3 xi1 zhuang1 ge2 lü3 ye3 ke3/ke4 yi3 hen3 zheng4 jing4 ”。|| They also have ‘You can be serious without a suit’ as one of their key beliefs. (Mandarin, [https://tatoeba.org/eng/sentences/show/785325 Tatoeba] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你的履历给我留下深刻的印象。}} || ni3 de5 lü3 li4 gei3 wo3 liu2 xia4 shen1 ke4 de5 yin4 xiang4 。|| Ihr Lebenslauf hat mich wirklich beeindruckt. (Mandarin, [https://tatoeba.org/eng/sentences/show/801990 Tatoeba] [https://tatoeba.org/eng/user/profile/egg0073 egg0073] [https://tatoeba.org/eng/user/profile/Merle Merle])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他履行了他的承诺,并且帮助了他的兄弟。}} || ta1 lü3 hang2/xing2 le5 ta1 de5 承 nuo4 , bing4 qie3 bang1 zhu4 le5 ta1 de5 xiong1 弟。|| Er hielt sein Versprechen und half seinen Brüdern. (Mandarin, [https://tatoeba.org/eng/sentences/show/784384 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我对自己的履历不那麼在意。}} || wo3 dui4 zi4 ji3 de5 lü3 li4 bu4 na4/nei4 me5 zai4 yi4 。|| Mein Lebenslauf ist mir nicht so wichtig. (Mandarin, [https://tatoeba.org/eng/sentences/show/8679963 Tatoeba] [https://tatoeba.org/eng/user/profile/shou shou] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |軍人必須履行他們的命令。}} || jun1 ren2 bi4 xu1 lü3 hang2/xing2 ta1 men5 de5 ming4 ling4 。|| Soldaten müssen Befehle ausführen. (Mandarin, [https://tatoeba.org/eng/sentences/show/798281 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Sudajaengi Sudajaengi])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我理所当然地认为他会履行诺言。}} || wo3 li3 suo3 dang1/dang4 ran2 de4/di4 ren4 wei2/wei4 ta1 hui4 lü3 hang2/xing2 nuo4 yan2 。|| Ich hielt es für selbstverständlich, dass er Wort halten würde. (Mandarin, [https://tatoeba.org/eng/sentences/show/781440 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|}
=== 阈 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|}
=== einzusortieren ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |十常侍皆免冠}} || shi2 chang2 shi4 jie1 mian3 guan1/guan4 || The ten regular attendants all removed their hats ([[s:en:Special:PermanentLink/5495657 | Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第002回 | 三國演義/第002回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |面如冠玉}} || mian4 ru2 guan1/guan4 yu4 || He had a striking face, like one of the jade ornaments which adorn so many hats ([[s:en:Special:PermanentLink/5776532 |Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第001回 | 三國演義/第001回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鬼影幢幢}} || gui3 ying3 chuang2 chuang2 || geisterhaft, gespenstisch ([[wikt:en:鬼影幢幢 |Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |郑人买履}} || zheng4 ren2 mai3 lü3 || (Geschichte vom) Mann, der Schuhe kaufen wollte. (mockingly) a person who rigidly adheres to rules and regulations (or established convention), while at the same time ignoring the reality of a situation ([[wikt:en:郑人买履 |Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |削足适履}} || xiao1/xue1 zu3 di4/shi4 lü3 || Literally: “slice off one's foot so that it will fit inside a shoe”.; to force an impractical solution to a problem([[wikt:en:削足适履|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |如履薄冰}} || ru2 lü3 bao2 bing1 || To tread on thin ice; to skate over thin ice; to be very careful; to act with extreme caution.([[wikt:en:如履薄冰|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |如履平地}} || ru2 lü3 ping2 de4/di4 || Wie ein Schritt auf ebener Fläche; sehr einfach([[wikt:en:如履平地|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |西装革履}} || xi1 zhuang1 ge2 lü3 || Westlicher Anzug und Lederschuhe; mit der Mode gehen([[wikt:en:西装革履|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那是幢高楼,不是吗?}} || na4/nei4 shi4 chuang2 gao1 lou2 , bu4 shi4 ma5 ?||That is a high building, is it not? [https://tatoeba.org/eng/sentences/show/333840 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/darinmex darinmex]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我一个人住在这幢房子里。}} || wo3 yi1 ge4 ren2 zhu4 zai4 zhe4/zhei4 chuang2 fang2 zi5 li3 。||Ich lebe alleine in diesem Haus. [https://tatoeba.org/eng/sentences/show/380729 Tatoeba] [https://tatoeba.org/eng/user/profile/sherryyyf sherryyyf] [https://tatoeba.org/eng/user/profile/Wolf Wolf]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那幢绿色屋顶的建筑是什么?}} || na4/nei4 chuang2 lü4 se4 wu1 ding3 de5 jian4 zhu2 shi4 shi2 me5 ?||Was ist dieses Gebäude mit dem grünen Dach? [https://tatoeba.org/eng/sentences/show/904472 Tatoeba] [https://tatoeba.org/eng/user/profile/FeuDRenais FeuDRenais] [https://tatoeba.org/eng/user/profile/Tono Tono]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这幢楼以前是医院。}} || zhe4/zhei4 chuang2 lou2 yi3 qian2 shi4 yi1 yuan4 。||Dieses Gebäude war früher mal ein Krankenhaus. [https://tatoeba.org/eng/sentences/show/791618 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Vortarulo Vortarulo]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那幢房子看起来被遗弃了。}} || na4/nei4 chuang2 fang2 zi5 kan4 qi3 lai2 bei4 yi2 qi4 le5 。||That house appears deserted. [https://tatoeba.org/eng/sentences/show/1394859 Tatoeba] [https://tatoeba.org/eng/user/profile/mtdot mtdot] [https://tatoeba.org/eng/user/profile/CM CM]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |鬼影幢幢}} || gui3 ying3 chuang2 chuang2 ||([[wikt:en:鬼影幢幢|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |看那边那幢高楼。}} || kan4 na4/nei4 bian1 na4/nei4 chuang2 gao1 lou2 。||Sieh dir das große Gebäude dort drüben an. [https://tatoeba.org/eng/sentences/show/346806 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Wauzl Wauzl]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |大家都渴望知道前冠军得主发生了什么。}} || da4 jia1 dou1/du1 ke3 wang4 zhi1 dao4 qian2 guan1/guan4 jun1 de2/de5/dei3 zhu3 fa1 sheng1 le5 shi2 me5 。||Everyone is anxious to know what has become of the former champion. [https://tatoeba.org/eng/sentences/show/829691 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/CM CM]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |面如冠玉}} || mian4 ru2 guan1/guan4 yu4 ||([[wikt:en:面如冠玉|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |静郭君来,衣威王之服,冠其冠,带其剑。}} || jing4 guo1 jun1 lai2 , yi1 wei1 wang2 zhi1 fu2 , guan1/guan4 qi2 guan1/guan4 , dai4 qi2 jian4 。||Als Dsing Go Gün nun kam, da trug er die Gewänder, die der König We ihm einst verliehen. Er hatte seinen Helm auf und sein Schwert umgegürtet. ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |衣冠楚楚}} || yi1 guan1/guan4 chu3 chu3 ||([[wikt:en:衣冠楚楚|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |A来,衣B王之服,冠其冠,带其剑。}} || A lai2 , yi1 B wang2 zhi1 fu2 , guan1/guan4 qi2 guan1/guan4 , dai4 qi2 jian4 。||Als A nun kam, da trug er die Gewänder, die der König B ihm einst verliehen. Er hatte dessen Helm auf und dessen Schwert umgegürtet. ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |只有一个人能成为世界冠军。问题是:会是谁呢?}} || zhi3 you3 yi1 ge4 ren2 neng2 cheng2 wei2/wei4 shi4 jie4 guan1/guan4 jun1 。 wen4 ti2 shi4 : hui4 shi4 shei2 ne5 ?||Nur einer wird Weltmeister. Die Frage ist, wie heißt er? [https://tatoeba.org/eng/sentences/show/3367342 Tatoeba] [https://tatoeba.org/eng/user/profile/go_oo go_oo] [https://tatoeba.org/eng/user/profile/Esperantostern Esperantostern]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你兩三天就會回復健康了。}} || ni3 liang3 san1 tian1 jiu4 hui4 hui2 復 jian4 kang1 le5 。||You will be all right again in a couple of days. [https://tatoeba.org/eng/sentences/show/359016 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |反復無常}} || fan3 復 wu2 chang2 ||([[wikt:en:反復無常|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他有任何復原的機會嗎?}} || ta1 you3 ren4 he2 復 yuan2 de5 ji1 hui4 ma5 ?||Is there any chance that he'll recover? [https://tatoeba.org/eng/sentences/show/893998 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她很快會康復的。}} || ta1 hen3 kuai4 hui4 kang1 復 de5 。||She will get well soon. [https://tatoeba.org/eng/sentences/show/363989 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |祝令尊早日康復。}} || zhu4 ling4 zun1 zao3 ri4 kang1 復。||My wishes for your father's rapid recovery. [https://tatoeba.org/eng/sentences/show/498450 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |老師再次恢復健康了。}} || lao3 shi1 zai4 ci4 hui1 復 jian4 kang1 le5 。||The teacher got quite well again. [https://tatoeba.org/eng/sentences/show/802483 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |陽氣復還}} || yang2 qi4 復 hai2/huan2 ||Die Kraft des Lichten würde zurückkommen ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我再看一次《王子復仇記》,加起來一共就看過三次了。}} || wo3 zai4 kan4 yi1 ci4 《 wang2 zi5 復仇 ji4 》, jia1 qi3 lai2 yi1 gong4 jiu4 kan4 guo4 san1 ci4 le5 。||I will have read Hamlet three times if I read it again. [https://tatoeba.org/eng/sentences/show/729503 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CM CM]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |子無復言矣}} || zi5 wu2 復 yan2 yi3 ||Ihr braucht nicht weiter zu reden. ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |無知何復道哉。}} || wu2 zhi1 he2 復 dao4 zai1 。||Ich weiß nicht, was ich sonst noch sagen soll. [https://tatoeba.org/eng/sentences/show/2710299 Tatoeba] [https://tatoeba.org/eng/user/profile/shanghainese shanghainese] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |早日康復!}} || zao3 ri4 kang1 復!||Gute Besserung! [https://tatoeba.org/eng/sentences/show/1541652 Tatoeba] [https://tatoeba.org/eng/user/profile/menyo menyo] [https://tatoeba.org/eng/user/profile/enteka enteka]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |夫復何求?}} || fu2 復 he2 qiu2 ?||What more could I ask for? [https://tatoeba.org/eng/sentences/show/6107116 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |過了六個月,他的腿便治好,回復正常了。}} || guo4 le5 liu4 ge4 yue4 , ta1 de5 tui3 bian4 zhi4 hao3 , hui2 復 zheng4 chang2 le5 。||After a six month period, his leg was healed and is normal again. [https://tatoeba.org/eng/sentences/show/452383 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CK CK]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |郑人买履}} || zheng4 ren2 mai3 lü3 ||([[wikt:en:郑人买履|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |它们主要的看法其中也有"没有西装革履也可以很正经"。}} || ta1/tuo2 men5 zhu3 yao4 de5 kan4 fa3 qi2 zhong1/zhong4 ye3 you3 " mei2/mo4 you3 xi1 zhuang1 ge2 lü3 ye3 ke3/ke4 yi3 hen3 zheng4 jing4 "。||They also have 'You can be serious without a suit' as one of their key beliefs. [https://tatoeba.org/eng/sentences/show/785325 Tatoeba] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他履行了他的承诺,并且帮助了他的兄弟。}} || ta1 lü3 hang2/xing2 le5 ta1 de5 承 nuo4 , bing4 qie3 bang1 zhu4 le5 ta1 de5 xiong1 弟。||Er hielt sein Versprechen und half seinen Brüdern. [https://tatoeba.org/eng/sentences/show/784384 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |西装革履}} || xi1 zhuang1 ge2 lü3 ||([[wikt:en:西装革履|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |如履薄冰}} || ru2 lü3 bao2 bing1 ||([[wikt:en:如履薄冰|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |如履平地}} || ru2 lü3 ping2 de4/di4 ||([[wikt:en:如履平地|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |渡水登山,如履平地}} || du4 shui3 deng1 shan1/shan5 , ru2 lü3 ping2 de4/di4 ||It can cross rivers and climb mountains as if it were on a piece of flat ground. ([[s:en:Special:PermanentLink/5495659 |Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第003回 | 三國演義/第003回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |步履維艱}} || bu4 lü3 wei2 jian1 ||([[wikt:en:步履維艱|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |削足适履}} || xiao1/xue1 zu3 di4/shi4 lü3 ||([[wikt:en:削足适履|Wiktionary en]])
|}
== Lückentexte ==
=== [[:zh:Wikijunior:太阳系/火星|Wikijunior: 太阳系/火星 Sonnensystem/Mars]] ===
{| class="wikitable"
! [[:zh:Wikijunior:太阳系/火星|Wikijunior: 太阳系/火星 Sonnensystem/Mars]] !! Übersetzung Christian Bauer
|-
| 火星有多大? || Wie groß ist der Mars?
|-
| 只有我们美丽地球的一半多一点点。 || Er hat im Vergleich mit unserer schönen Erde nur etwas mehr als die Hälfte der Größe.
|-
| 准确地说,火星的直径有6804.9公里。 || Genau gesagt beträgt der Durchmesser des Mars 6804 km.
|-
|
|-
| 火星的表面是什么样子的? || Welcher Art ist die Oberfläche des Mars?
|-
| 虽然其名称为“火星”, || Obwohl er chinesisch als "Feuerplanet" bezeichnet wird
|-
| 但其表面并非如其名称, || ist seine Oberfläche nicht so wie sein Name,
|-
| 表面满是“火”。 || der besagt, das die Oberfläche voller Feuer ist.
|-
| 火星的表面 ist vielmehr 干燥, || Die Oberfläche des Mars ist vielmehr trocken
|-
| 以及满布尘埃, || und voller Staub.
|-
| 还有不少环形山。 || Auch gibt es nicht wenige Krater.
|-
| 南半球高地的环形山比北半球低地的多, || Die Krater der Hochebenen der Südhalbkugel sind im Vergleich zu denen der Tiefländer der Nordhalbkugel viel zahlreicher.
|-
| 其中一个环形山的直径达2100公里。 || Unter diesen hat ein Krater einen Durchmesser von 2100 km.
|-
| 除环形山外,火星表面也可以找到火山, || Außer Kratern kann man auf der Marsoberfläche auch Vulkane finden.
|-
| 当中以奥林巴斯山最高, || Unter diesen ist Olympus mons der Höchste.
|-
| 高度达27公里, || Seine Höhe erreicht 27 km;
|-
| 阔度也有540公里, || seine Breite beträgt 540 km.
|-
| 是太阳系所有行星中最高的山。 || Er ist der höchste Vulkan eines Planeten des Sonnensystems.
|-
| 火星的表面还有 Canyons, || Die Marsoberfläche enthält auch Canyons.
|-
| 其中一个名为Valles Marineris的 Canyon,长4000公里,阔200公里,深7公里, || Unter diesen ist der Valles Marineris genannte Canyon 4000 km lang, 200 km breit und 7 km tief.
|-
| 比美国境内的 Grand Canyon 还要大。 || Im Vergleich zu dem im Gebiet der Vereinigten Staaten gelegenen Grand Canyon ist er viel größer.
|-
| 火星的南北极两端各有一个极冠, || Auf dem Marsnord- und -südpol gibt es jeweils ein Polkappe.
|-
| 主要由固态水(冰)和 Kohlendioxid 所组成, || Sie wird hauptsächlich aus festem Wassereis und Kohlendioxid gebildet.
|-
| 当中北极的极冠比南极的大。 || Die Polkappe des Nordpols ist, im Vergleich zu der des Südpols, größer.
|-
| 在一些地方可以找到旧的河床, || An einige Orten kann man alte Flußbette finden.
|-
| 有人, die dachten, 是因水分的 errodiert 而形成, || Die Menschen dachten, sie wären aufgrund von Feuchtigkeit erodiert und gebildet.
|-
| 因此推断火星在很久以前曾经是一个像地球的水行星。 || Daraus wiederum schlossen sie, dass der Mars vor langer Zeit ein Wasserplanet ähnlich der Erde gewesen wäre.
|-
|
|-
| 火星上有生命存在吗? || Existiert Leben auf dem Mars?
|-
| 目前还在 Spekulationen, || Aktuell ist man immer noch am Spekulieren. ||
|-
| 有人说,火星以前可能有生命, || Manche Menschen sagen, der Mars könne früher Leben gehabt haben
|-
| 因为火星上曾经有水的 Spuren。|| weil es auf dem Mars früher Spuren von Wasser gab.
|-
|
|-
| 火星的卫星是怎样的? || Wie sind die Monde des Mars beschaffen?
|-
| 火星有两个卫星, || Der Mars hat zwei Monde
|-
| 火卫一和火卫二, || Marssatellit 1 (Phobos) und Marssatellit 2 (Daimos).
|-
| 其不规则形状似 Kartoffel, || Sie haben eine unregelmäßige Form, ähnlich einer Kartoffel.
|-
| 直径在10公里以下, || Ihr Durchmesser liegt unter 10 km.
|-
| 有人 spekulieren, 该两个卫星来自小行星带。 || Manche Leute spekulieren, dass die beiden Satelliten aus dem Asteroidengürtel stammen.
|-
|
|-
| 火星的一天有多长? || Wie lange ist ein Marstag?
|-
| 火星自转一周的时间是地球的1.025倍。 || Die Zeit für eine Rotationsperiode des Mars beträgt das 1,025 fache der Erde
|-
|
|-
| 火星是由什么构成的? || Aus welchen Bestandteilen besteht der Mars?
|-
| 火星内核的主要成分 schätzungsweise 由铁和 Schwefel 组成, || Die Hauptbestandteile des Marskerns bestehen schätzungsweise aus Eisen und Schwefel.
|-
| 其外层则有 Silikate、oxydiertem 铁等。 || Seine äußeren Schichten hingengen bestehen aus Silikaten und oxydiertem Eisen
|-
|
|-
| 如果我站在火星上会有多重? || Wenn ich auf dem Mars stünde, wie schwer wäre ich dann?
|-
| 火星的重力是地球的0.379倍, || Die Gravitation des Mars ist das 0,379 fache der Erde
|-
| 如果你的重量有100公斤, || Wenn dein Gewicht 100 kg betragen würde,
|-
| 你在火星的重量将是37.9公斤。 || wäre dein Gewicht auf dem Mars 37,9 kg.
|-
|
|-
| 为什么会命名为“火星”? || Warum wird er als "Mars (europäisch)/Feuerplanet (chinesisch)" bezeichnet?
|-
| 中文名称 || Chinesischer Name
|-
| “火”是中国五行之一, || Das Feuer ist eines der Elemente aus der chinesischen 5-Elemente-Lehre
|-
| 在地球上以肉眼 beobachtet 火星, || Wenn man auf der Erde mit bloßem Auge den Mars beobachtet,
|-
| 其颜色是红色的,因此名为“火星”。 || ist seine Farbe (feuer-)rot. Daher wird er Feuerplanet genannt.
|-
| 西汉时期,天文学家司马迁把五大行星与春秋战国以来的“五行”学说联系在一起, || Zur Zeit der westlichen Han-Dynastie nahm der Astronom Sima Qian die 5 großen Planeten und verband sie mit der 5-Elemente-Lehre aus der Zeit der Frühlings- und Herbstannalen und der Streitenden Reiche.
|-
| 正式把五大行星命名为“金星”、“木星”、“水星”、“火星”、“土星”。 || Offiziell werden die 5 großen Planeten als Metall-/Goldplanet, Holzplanet, Wasserplanet, Feuerplanet und Erdplanet bezeichnet.
|-
| 五行配五色,木为青,火为赤,土为黄,金为白,水为黑。 || Die 5 Elemente sind verbunden mit den 5 Farben: Holz mit grün, Feuer mit rot, Erde mit gelb, Gold/Metall mit weiß, Wasser mit schwarz.
|-
| 司马迁从实际 Beobachtungen 发现, || Sima Qian hat das aufgrund praktischer Beobachtungen herausgefunden.
|-
| 这些在《史记‧天官书》中有明确反映, || Diese sind deutlich im Shiji, den Aufzeichnungen der Historiker im Buch des Himmelspalastes, beschrieben.
|-
| 可见司马迁对五大行星的命名也是从事实出发, || Es ist deutlich sichtbar, dass Sima Qian bei den Namen der 5 großen Planeten auch von Fakten ausging.
|-
| 原本不含任何神话观念, || Ursprünglich gab es noch keine Mythen über sie.
|-
| 这与古希腊人依据神话中的 Götterwesen 命名形成鲜明对比, || Dies bildet einen klaren Kontrast zu den bei den alten Griechen bestehenden Mythen, bei denen sie nach Götterwesen benannt sind.
|-
| 再一次反映出中国天文观念的重实用 phantasieablehnenden 精神。 || Sie spiegeln einen - hier aus dem Konzepten der chinesischen Astronomie stammenden - faktenbasierten, phantasieablehnenden Geist wieder
|-
|
|-
| 西方名称 || Westlicher Name
|-
| 由于它以象征战争的赤红色出现在天空, || Da er in kriegssymbolisierendem Karmesionrot am Himmel erscheint
|-
| 火星被以罗马战争之神马尔斯命名。 || wurde der Planet nach dem römischen Kriegsgott Mars benannt.
|}
=== 小杨式太极拳 / 杨式十式太极拳 Taijiquan: kleine Yang-Form/ 10er Yang-Form===
{| class="wikitable"
|-
| 1 || 起势 || qǐ shì || Vorbereitung, das Qi wecken
|-
| 2 || 左右 倒 卷 Oberarm || zuǒ yòu dào juǎn gōng || den Affen abwehren, links und rechts
|-
| 3 || 左右 greife 膝 knicke 步 || zuǒ yòu lǒu xī ǎo bù || das Knie streifen, links und rechts
|-
| 4 || 左右野马分 Pferdemähne || zuǒ yòu yě mǎ fēn zōng || die Mähne des Wildpferds teilen, links und rechts
|-
| 5 || 左右云手 || zuǒ yòu yún shǒu || Wolkenhände, links und rechts
|-
| 6 || 左右金鸡独立 || zuǒ yòu jīn jī dú lì || der goldene Hahn steht auf einem Bein, links und rechts
|-
| 7 || 左右 treten 脚 || zuǒ yòu dēng jiǎo || Fersentritt, rechts und links
|-
| 8 || 左右揽 Spatzen 尾<br/>Abwehr<br/>履<br/>drücken<br/>按 || yòu zuǒ lǎn què wěi <br/> yòu zuǒ bīng<br/>lǚ<br/>jǐ<br/>àn|| Den Spatz am Schwanz fassen, links und rechts<br/> Abwehr<br/> Zurückweichen<br/> drücken<br/> stoßen
|-
| 9 || 十字手 || shí zì shǒu || Hände kreuzen
|-
| 10 || 收势 || shōu shì || Abschluß
|}
=== Haenisch: Lehrgang der klassischen chinesischen Schriftsprache ===
==== 第五十四課 ====
第五十四课
dì wǔ shí sì kè
Vierundfünfzigste Lektion
Es ist auch die 53. Lektion im [https://hkx.eu/mins/37589.html 初等國文課, den elementaren landessprachlichen Lektionen], eine Geschichte über den 雞/鸡/Hahn.
-----------------------------------
古人謂雞有五德.
古人谓鸡有五德.
Gǔ rén wèi jī yǒu wǔ dé.
Die Menschen in alter Zeit sagten, der Hahn besitzt die 5 Tugenden.
-----------------------------------
頭戴冠,文也.
头戴冠,文也.
Tóu dài guān wén yě.
Auf dem Kopf trägt er einen (Beamten)hut; das ist Gelehrsamkeit.
-----------------------------------
足傅距,武也.
足傅距,武也.
Zú fù jù wǔ yě.
Am Fuß haftet ein Sporn; das ist Kampftechnik.
-----------------------------------
敌在前敢斗,勇也.
Dí zài qián gǎn dòu yǒng yě.
Steht ein Feind vor der Tür, kämpft er ohne auf sich Rücksicht zu nehmen; das ist Mut.
-----------------------------------
見食相呼,仁也.
见食相呼,仁也.
Jiàn shí xiàng hū rén yě.
Sieht er Essen, ruft er umher; das ist Menschlichkeit.
-----------------------------------
守夜不失時,信也.
守夜不失时,信也.
Shǒu yè bù shī shí xìn yě.
Er wacht in der Nacht, ohne zeitliche Lücken; das ist Vertrauenswürdigkeit.
-----------------------------------
==== 第六十七課 ====
第六十七课
dì liù shí qī kè
Siebenundsechzigste Lektion
Eine [[s:zh:%E7%BA%8C%E5%BE%8C%E6%BC%A2%E6%9B%B8_(%E9%83%9D%E7%B6%93,_%E5%9B%9B%E5%BA%AB%E5%85%A8%E6%9B%B8%E6%9C%AC)/%E5%8D%B769%E4%B8%AD| Variante dieses Textes]] findet sich in den [[w:Hou_Hanshu|Schriften der Späteren Han]].
-----------------------------------
管宁村居.
Guǎn níng cūn jū.
Guan Ning lebte in einem Dorf.
-----------------------------------
村中有井.
村中有井.
Cūn zhōng yǒu jǐng.
In der Dorfmitte gab es einen Brunnen.
-----------------------------------
Wasserschöpfen-者常爭井_ Zank.
Wasserschöpfen-者常争井斗 Zank.
Jí zhě cháng zhēng jǐng dòu xì.
Die Wasserschöpfenden hatten oft Auseinandersetzungen am Brunnen (wer zuerst schöpfen durfte). Es kam zu Streit und Zank.
-----------------------------------
_多買 Schöpf-器.
宁多买 Schöpf-器.
Níng duō mǎi jí qì.
Ning kaufte viele Schöpfgefäße.
-----------------------------------
分置井旁以待 schöpfen-者.
Fēn zhì jǐng páng yǐ dài jí zhě.
Verteilend stellte er sie an den Brunnenrand, um die Wasserschöpfer zu unterstüzten
-----------------------------------
又不使知.
又不使知.
Yòu bù shǐ zhī.
und ließ sie dabei nicht wissen (wer die Schöpfgefäße aufgestellt hatte)
-----------------------------------
來者怪而問之.
来者怪而问之.
Lái zhě guài ér wèn zhī.
Die Ankommenden wunderten sich und fragten sich (was hier los ist).
-----------------------------------
知_所為.
知宁所为.
Zhī níng suǒ wéi.
Sie erfuhren, dass es Ning war, der dies getan hatte.
-----------------------------------
乃皆感 beschämt.
Nǎi jiē gǎn kuì.
Daraufhin fühlten sich alle beschämt.
-----------------------------------
不復爭_.
不复争斗.
Bù fù zhēng dòu.
Es kam nicht zu erneuten Streitereien.
-----------------------------------
==== 第七十課 ====
第七十课
dì qī shí kè
Siebzigste Lektion
Eine Variante dies Textes findet man auf [[s:zh:%E6%AC%BD%E5%AE%9A%E5%8F%A4%E4%BB%8A%E5%9C%96%E6%9B%B8%E9%9B%86%E6%88%90/%E6%98%8E%E5%80%AB%E5%BD%99%E7%B7%A8/%E5%AE%B6%E7%AF%84%E5%85%B8/%E7%AC%AC044%E5%8D%B7|wikisource]] im [[w:en:Gujin_Tushu_Jicheng|古今圖書集成/古今图书集成/Gujin Tushu Jicheng, der Sammlung alter und neuer Bücher]].
-----------------------------------
Das Thema ist
戒 Lügen
Jiè mán yǔ
Warnung vor Lügen(worten)
-----------------------------------
司馬光幼時與姊弄青胡桃。
司马光幼时与姊弄青胡桃。
Sī mǎ guāng yòu shí yǔ zǐ nòng qīng hú táo.
In Sima Guangs Kindheit spielte er zusammen mit seiner älteren Schwester mit grünen Walnüssen.
-----------------------------------
Variante:
光五六歲時弄核桃
光五六岁时弄核桃
Guāng wǔ liù suì shí nòng hé táo
Als Guang 5 oder 6 Jahre alt war, spielte er mit Walnüssen.
-----------------------------------
欲脫其皮。
欲脱其皮。
Yù tuō qí pí.
Sie wollten ihre Schale ablösen.
-----------------------------------
Variante
女兄欲為脫其皮
女兄欲为脱其皮
Nǚ xiōng yù wéi tuō qí pí
Seine ältere Schwester wollte ihre Schale ablösen.
-----------------------------------
不得。
不得。
Bù dé.
Es gelang nicht.
-----------------------------------
姊去。(女兄去)
姊去。(女兄去)
Zǐ qù. (nǚ xiōng qù)
Die ältere Schwester ging weg.
-----------------------------------
(一) Magd 以_脫之。
(一) Magd 以汤脱之。
(yī) bì yǐ tāng tuō zhī.
Eine Magd löste sie mit heißem Wasser ab.
-----------------------------------
姊來。(女兄復來)
姊来。(女兄复来)
Zǐ lái. (nǚ xiōng fù lái)
Die Schwester kam (wieder) zurück.
-----------------------------------
問誰脫之。 (問脫核桃者)
问谁脱之。 (问脱核桃者)
Wèn shéi tuō zhī. (Wèn tuō hé táo zhě)
Sie fragte, wer die Schale abgelöst hatte.
-----------------------------------
光曰。自脫也。
光曰。自脱也。
Guāng yuē. Zì tuō yě.
Guang sagte: Ich selbst habe sie abgemacht.
-----------------------------------
其父呵曰。
其父呵曰。
Qí fù hē yuē.
Sein Vater sagte scheltend:
-----------------------------------
(小子)何得 Lügen。
(Xiǎo zi) hé dé mán yǔ.
(Mein Sohn,) wie kann es zu diesen Lügen(worten) kommen?
-----------------------------------
光自是終身不敢 zu lügen。 (光自是不敢 zu lügen)
光自是终身不敢 zu lügen。 (光自是不敢 zu lügen)
Guāng zì shì zhōng shēn bù gǎn mán yǔ. (Guāng zì shì bù gǎn mán yǔ)
Guang hat sich bis zu zu seinem Lebensende nicht mehr erdreistet, zu lügen. (Guang hat sich nie mehr erdreistet, zu lügen.)
-----------------------------------
==== 第一百課 ====
第一百课
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:EDG战队获得2021年英雄联盟LPL夏季赛冠军|Wikinews ]] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
EDG战队获得2021年英雄联盟LPL夏季赛冠军【2021年9月2日讯】<br/><br/>9月2日晚,2021年英雄联盟LPL夏季赛决赛在杭州奥体中心顺利结束,EDG战队以3-1的大比分战胜FPX战队,获得2021年英雄联盟LPL夏季赛冠军。
}}
Noch keine Übersetzung
=== [[n:zh:宁波诺丁汉大学IT社电子竞技大赛决赛结束|Wikinews 宁波诺丁汉大学IT社电子竞技大赛决赛结束]] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
【2011年10月30日 宁波讯】 <br/><br/>当日晚,在宁波诺丁汉大学SSB教学楼329室,举行了IT社团举办的电子竞技大赛决赛。比赛分《魔兽争霸》、《反恐精英》和《DOTA》三个项目,分别决出了冠军选手和冠军队。
}}
Noch keine Übersetzung
=== [https://archive.org/details/hienwunshoochin01davigoog Davis: Chinese moral maxims XXXV ]===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 瓜田不纳履.李下不整冠. }} || gua1 tian2 bu4 na4 lü3 . li3 xia4 bu4 zheng3 guan1/guan4 . || In a field of melons, do not pull up your shoe: under a plumtree, do not adjust your cap; (i.e. be very careful of your actions under circumstances of suspicion).
|}
=== [http://museum.marcopoloproject.org/2014/08/12/important-questions-about-the-new-silk-road-%e4%b8%ad%e5%9b%bd%e9%87%8d%e8%bf%94%e4%b8%9d%e7%bb%b8%e4%b9%8b%e8%b7%af%e7%9a%84%e5%87%a0%e4%b8%aa%e9%87%8d%e5%a4%a7%e9%97%ae%e9%a2%98/ the marco polo project: 中国重返丝绸之路的几个重大问题 – Important questions about the new silk road (Auszug)] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |中国要“走出去”。只有“走出去”才会成为大国,也只有“走出去”,才能履行作为大国的责任。就丝绸之路来说,这不是一个“应当怎样”的规范性问题,而是一个实际问题,就是中国要做什么?要回答“做什么”的问题,首先就要明了一些应该注意的大战略问题。没有一个大战略概念,很难去实施有效的丝绸之路。要把丝绸之路做成一个大战略,至少必须考虑如下几个大方面的问题。
}}
[http://museum.marcopoloproject.org/author/zheng-yongnian/ Zheng Yongnian] [http://www.21ccom.net/articles/qqsw/zlwj/article_20140617107909.html 21ccom.net]
China wants to step up. Only by “stepping up” can China become a great nation, and only by “stepping up” can China fulfil its responsibilities as a great nation. When it comes to the Silk Road, it’s not a normative question of “what should be done”, but a question of practicality: “what does China want to do?” In order to answer this “what” question, it’s first necessary to note and understand some of the major strategic issues. Without a grand strategic concept, it’s very hard to implement an effective Silk Road plan. If the Silk Road is to be made part of some grand strategy, the following major aspects need to be brought into consideration at the very least.
...
=== Haenisch: Lehrgang der klassischen chinesischen Schriftsprache Lektion 54 ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
<br/>古人谓鸡有五德.
<br/>头戴冠文也.
<br/>足傅距武也.
<br/>敌在前敢斗勇也.
<br/>见食相呼仁也.
<br/>守夜不失时信也.
}}
=== [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
Anciently, (all) caps were (made) with the seams going up and down them; now the (mourning cap) is made with the seams going round. Hence to have the mourning cap different from that worn on felicitous occasions is not the way of antiquity.
==== [https://ctext.org/liji/wang-zhi/ens Wang Zhi] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
六礼:冠、昏、丧、祭、乡、相见。七教:父子、兄弟、夫妇、君臣、长幼、朋友、宾客。八政:饮食、衣服、事为、异别、度、量、数、制。
}}
Übersetzung James Legge
The six ceremonial observances were: capping; marrying; mourning rites; sacrifices; feasts; and interviews. The seven lessons (of morality) were: (the duties between) father and son; elder brother and younger; husband and wife; ruler and minister; old and young; friend and friend; host and guest. The eight objects of government were:-food and drink; clothes; business (or, the profession); maintenance of distinctions; measures of length; measures of capacity; and definitely assigned rules.
==== [https://ctext.org/liji/li-yun/ens Li Yun] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
是故夫礼,必本于大一,分而为天地,转而为阴阳,变而为四时,列而为鬼神。其降曰命,其官于天也。夫礼必本于天,动而之地,列而之事,变而从时,协于分艺,其居人也曰养,其行之以货力、辞让:饮食、冠昏、丧祭、射御、朝聘。
}}
Übersetzung James Legge
From all this it follows that rules of ceremony must be traced to their origin in the Grand Unity. This separated and became heaven and earth. It revolved and became the dual force (in nature). It changed and became the four seasons. It was distributed and became the breathings (thrilling in the universal frame). Its (lessons) transmitted (to men) are called its orders; the law and authority of them is in Heaven. While the rules of ceremony have their origin in heaven, the movement of them reaches to earth. The distribution of them extends to all the business (of life). They change with the seasons; they agree in reference to the (variations of) lot and condition. In regard to man, they serve to nurture (his nature). They are practised by means of offerings, acts of strength, words and postures of courtesy, in eating and drinking, in the observances of capping, marriage, mourning, sacrificing, archery, chariot-driving, audiences, and friendly missions.
==== [https://ctext.org/liji/jiao-te-sheng/ens Jiao Te Sheng] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
无大夫冠礼,而有其昏礼。古者,五十而后爵,何大夫冠礼之有?诸侯之有冠礼,夏之末造也。
}}
Übersetzung James Legge
There were no observances peculiar to the capping (in the families) of Great officers, though there were (peculiar) marriage ceremonies. Anciently a man was fifty when he took the rank of a Great officer; how should there have been peculiar ceremonies at his cappings? The peculiar ceremonies at the cappings as used by the princes arose in the end of the Xia dynasty.
==== [https://ctext.org/liji/guan-yi/ens Guan Yi] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
凡人之所以为人者,礼义也。礼义之始,在于正容体、齐颜色、顺辞令。容体正,颜色齐,辞令顺,而后礼义备。以正君臣、亲父子、和长幼。君臣正,父子亲,长幼和,而后礼义立。故冠而后服备,服备而后容体正、颜色齐、辞令顺。故曰:冠者,礼之始也。是故古者圣王重冠。
}}
Übersetzung James Legge
Generally speaking, that which makes man man is the meaning of his ceremonial usages. The first indications of that meaning appear in the correct arrangement of the bodily carriage, the harmonious adjustment of the countenance, and in the natural ordering of the speech. When the bodily carriage is well arranged, the countenance harmoniously adjusted, and speech naturally ordered, the meaning of the ceremonial usages becomes complete, and serves to render correct the relation between ruler and subject, to give expression to the affection between father and son, and to establish harmony between seniors and juniors. When the relation between ruler and subject is made correct, affection secured between father and son, and harmony shown between seniors and juniors, then the meaning of those usages is established. Hence after the capping has taken place, provision is made for every other article of dress. With the complete provision of the dress, the bodily carriage becomes (fully) correct, the harmonious expression of the countenance is made perfect, and the speech is all conformed to its purposes. Hence it is said that in capping we have the first indications of (the meaning of the) ceremonial usages. It was on this account that the sage kings of antiquity made so much as they did of the capping.
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
故孝弟忠顺之行立,而后可以为人;可以为人,而后可以治人也。故圣王重礼。故曰:冠者,礼之始也,嘉事之重者也。是故古者重冠;重冠故行之于庙;行之于庙者,所以尊重事;尊重事而不敢擅重事;不敢擅重事,所以自卑而尊先祖也。}}
Übersetzung James Legge
Thus when the discharge of filial and fraternal duties, of loyal service, and of deferential submission was established, he could indeed be regarded as a (full-grown) man. When he could be regarded as such, he could be employed to govern other men. It was on this account that the sage kings attached such an importance to the ceremony, and therefore it was said, that in capping we have the introduction to all the ceremonial usages, and that it is the most important of the festive services.
==== [https://ctext.org/liji/hun-yi/ens Hun Yi] ====
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
夫礼始于冠,本于昏,重于丧、祭,尊于朝、聘,和于射、乡:此礼之大体也。
}}
Übersetzung James Legge
Ceremonies (might be said to) commence with the capping; to have their root in marriage; to be most important in the rites of mourning and sacrifice; to confer the greatest honour in audiences at the royal court and in the interchange of visits at the feudal courts; and to be most promotive of harmony in the country festivals and celebrations of archery. These were the greatest occasions of ceremony, and the principal points in them.
== [[s:zh:弟子規 | 弟子规]] ==
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 冠必正、纽必结}} || guan1/guan4 bi4 zheng4 、 niu3 bi4 jie1/jie2 || Der Hut muß gerade sitzen, die Knöpfe zugeknöpft sein
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 袜与履、俱紧切}} || wa4 yu3 lü3 、 ju4 jin3 qie1 || Socken und Schuhe müssen eng sitzen
|}
== [https://zh.wikibooks.org/zh-cn/德语/文法 德语 Kapitel 文法] ==
=== Text ===
动词
所有的动词在原形时都以 en 或 n 结尾。根据主语的不同德语中的动词在每个时态下有七个不同的变位,加上许多动词的变化不规则(尤其常用的动词非常不规则),使得德语的难学度更加增加了。以下是几个常用动词在现在时态的变位:
规则动词例
不规则动词例
中文意义 建造* 是 读
原形 bauen sein lesen
我、ich baue bin lese
你、du baust bist liest
他、她、它、er,sie,es baut ist liest
我们、wir bauen sind lesen
你们、ihr baut seid lest
他、她、它们、sie bauen sind lesen
您、Sie bauen sind lesen
<建造*> 动作时态显示词,在中文无固定词汇直接能翻译。
德语中一共有六个时态:现在时、过去时、将来时、现在完成时、过去完成时和将来完成时。下面是一个规则动词六个时态的例子:
时态 德语 汉语
现在时 Ich baue 我在做的
过去时 Ich baute 我曾做过的
将来时 Ich werde bauen 我将会做的
现在完成时 Ich habe gebaut 我刚做完的
过去完成时 Ich hatte gebaut 我曾经完成的
将来完成时 Ich werde gebaut haben 我将会完成的
除命令式和一般疑问句外一般动词在一个句子里被放在第二位。假如一句话里有助动词,那么这个助动词放在第二位,真正的动词要放在句尾。下面的一句话里动词被标重:
Ich baue ein Haus Ich will ein Haus bauen
我盖一幢房 我想要盖一幢房
在副句中动词一律被放在句子的最后(以als为连词的非现实比较句除外)。
=== Übersetzung(shilfe) ===
Verben
Alle Verben enden im Infinitiv auf "en" oder "n"
So wie die Subjekte unterschiedlich sind haben die deutschen Verben in jeder Zeitform sieben unterschiedliche Veränderungen.
Außerdem haben viele Verben noch unregelmäßige Veränderungen (besonders die häufig verwendeten Verben sind sehr unregelmäßig), die dazu führen, dass Deutsch sehr schwer zu lernen ist.
Nachfolgend stehen die Konjugationen einiger häufig verwendeter Verben in der Gegenwart:
Beispiele für Konjugationsregeln
Beispiele für unregelmäßige Verben Chinesische Bedeutung
bauen sein lesen (Infinitiv)
ich baue bin lese
du baust bist liest
er,sie,es baut ist liest
wir bauen sind lesen
ihr baut seid lest
sie bauen sind lesen
Sie bauen sind lesen
???
Im Deutschen gibt es insgesamtsechs Zeitformen:
Gegenwart, Vergangenheit, Zukunft, vollendete Gegenwart, vollendete Vergangenheit und vollendetes Futur
Nachfolgend Beispiele für die Zeitformen einiger regelmäßiger Verben:
Zeit Deutsch Chinesisch
Gegenwart: Ich baue
Vergangenheit: Ich baute
Zukunft: Ich werde bauen
Vollendete Gegenwart: Ich habe gebaut
Vollendete Vergangenheit: Ich hatte gebaut
Vollendete Zukunft: Ich werde gebaut haben
Außer bei der Befehlsform und der gewöhnlichen Frageform stehen Verben in einem Satz gewöhnlich an zweiter Position.
Wenn es in einem Satz ein Hilfsverb gibt, steht dieses Hilfsverb an zweiter Position, das Hauptverb muss am Ende des Satzes stehen.
Der nachfolgende Satz wird mit zwei Formen des Verbs formuliert:
Ich baue ein Haus - Ich will ein Haus bauen
Im zweiten Satz ist das Verb das gleiche, steht aber an letzter Position
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 629|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 629|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 631|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 631}}
</noinclude>
jdj20et8wk7sa53az7qr1fldmly3otg
Vokabeltexte Chinesisch/ Vokabellektionen/ Lektion 631
0
101715
1088533
1013237
2026-07-01T13:03:51Z
Christian-bauer
6469
kleinere Ergänzungen und Korrekturen
1088533
wikitext
text/x-wiki
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 630|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 630|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 632|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 632}}
</noinclude>
== Zeichen ==
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |秽}} || hui4 || Dreck, Schmutz, schmutzig || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=秽}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循}} || xun2 || aufrechterhalten, festhalten an, beachten, befolgen, gemäß || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=循}}
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |拣}} || jian3 || auswählen || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=拣}} (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |箕}} || ji1 || Kornschwinge, Getreideschwinge, Kehrblech, Kehrschaufel, Worfschaufel, Schleife (Fingerabdruck), Sieb || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=箕}} [[Datei:箕-oracle.svg|40px]][[Datei:箕-bronze.svg|40px]][[Datei:箕-silk.svg|40px]][[Datei:箕-seal.svg|40px]][[Datei:箕-bigseal.svg|40px]]
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥}} || hui1 || Indianerzelt, auseinander jagen, auseinander stieben, etwas zerstreuen, etwas abwischen, etwas schwingen, etwas schwenken, kommandieren || {{:Vokabeltexte_Chinesisch/ Vorlage:Texte_Zeichen_Externe_Links|Zeichen=挥}} (HSK 3.0 Band 7-9)
|}
== Zusammengesetzte Wörter ==
=== 秽 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |淫秽}} || yin2 hui4 || Obszönität, Schamlosigkeit, garstig, schamlos, unzüchtig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |秽物}} || hui4 wu4 || Unreinheiten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |污秽}} || wu1 hui4 || schmutzig, unsauber, Dreck, Kontamination, Schmutzigkeit, Verseuchung, fies, garstig || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |芜秽}} || wu2 hui4 || to be overgrown with weeds
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |秽水}} || hui4 shui3 || dirty water, polluted water, sewage
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |秽语}} || hui4 yu3 || obscene language
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |淫词秽语}} || yin2 ci2 hui4 yu3 || obscene words, dirty talk
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |污言秽语}} || wu1 yan2 hui4 yu3 || Gassensprache, Schimpfwörter, ordinär
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |淫秽语言或行为}} || yin2 hui4 yu3 yan2 huo4 xing2 wei2 || Obszönität
|}
=== 循 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |因循}} || yin1 xun2 || aufschieben
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循序}} || xun2 xu4 || der Reihe nach
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环}} || xun2 huan2 || Kreislauf, periodisch, Rekursion, Umlauf, Zyklus, rotieren, runden, zirkulieren, rund, umdrehend, zyklisch || (HSK 3.0 Band 6)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循環}} || xun2 huan2 || (traditionelle Schreibweise von 循环), Kreislauf, periodisch, Rekursion, Umlauf, Zyklus, rotieren, runden, zirkulieren, rund, umdrehend, zyklisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |依循}} || yi1 xun2 || jemandem nachstellen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |遵循}} || zun1 xun2 || festhalten an, befolgen, einhalten, sich nach etwas richten, sich an etwas halten || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循化}} || Xun2 hua4 || Xunhua Salazu autonomous county in Haidong prefecture 海東地區|海东地区[Hai3 dong1 di4 qu1], Qinghai
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循着}} || xun2 zhe5 || to follow
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循著}} || xun2 zhe5 || (traditionelle Schreibweise von 循着), to follow
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循分}} || xun2 fen4 || to abide by one's duties
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |小循环}} || xiao3 xun2 huan2 || kleiner Zyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |小循環}} || xiao3 xun2 huan2 || (traditionelle Schreibweise von 小循环), kleiner Zyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环赛}} || xun2 huan2 sai4 || Rundenturnier
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |莫理循}} || mo4 li3 xun2 || George Ernest Morrison
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循化县}} || xun2 hua4 xian4 || Kreis Xunhua (Provinz Qinghai,China)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循化縣}} || xun2 hua4 xian4 || (traditionelle Schreibweise von 循化县), Kreis Xunhua (Provinz Qinghai,China)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |微循环}} || wei1 xun2 huan2 || Mikrozirkulation
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |微循環}} || wei1 xun2 huan2 || (traditionelle Schreibweise von 微循环), Mikrozirkulation
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环制}} || xun2 huan2 zhi4 || Round Robin
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循環制}} || xun2 huan2 zhi4 || (traditionelle Schreibweise von 循环制), Round Robin
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |四循环}} || si4 xun2 huan2 || tetrazyklisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |四循環}} || si4 xun2 huan2 || (traditionelle Schreibweise von 四循环), tetrazyklisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |再循环}} || zai4 xun2 huan2 || Rücknahme, rückläufig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |再循環}} || zai4 xun2 huan2 || (traditionelle Schreibweise von 再循环), Rücknahme, rückläufig
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环性}} || xun2 huan2 xing4 || drehen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循環性}} || xun2 huan2 xing4 || (traditionelle Schreibweise von 循环性), drehen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |水循环}} || shui3 xun2 huan2 || Wasserumlauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |水循環}} || shui3 xun2 huan2 || (traditionelle Schreibweise von 水循环), Wasserumlauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环论证}} || xun2 huan2 lun4 zheng4 || Zirkelschluss
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循序渐进}} || xun2 xu4 jian4 jin4 || schrittweise vorwärtsgehen, Schritt für Schritt vorgehen || (HSK 3.0 Band 7-9)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循证医学}} || xun2 zheng4 yi1 xue2 || evidenzbasierte Medizin
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环经营}} || xun2 huan2 jing1 ying2 || Kreislaufwirtschaft
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |恶性循环}} || e4 xing4 xun2 huan2 || Teufelskreis
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |惡性循環}} || e4 xing4 xun2 huan2 || (traditionelle Schreibweise von 恶性循环), Teufelskreis
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |卡诺循环}} || ka3 nuo4 xun2 huan2 || Carnot-Prozess
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |光油循环}} || guang1 you2 xun2 huan2 || Lackumlauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |光油循環}} || guang1 you2 xun2 huan2 || (traditionelle Schreibweise von 光油循环), Lackumlauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环使用}} || xun2 huan2 shi3 yong4 || wiederverwenden, wiederaufbereiten, wiederverwerten, recyceln
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循環使用}} || xun2 huan2 shi3 yong4 || (traditionelle Schreibweise von 循环使用), wiederverwenden, wiederaufbereiten, wiederverwerten, recyceln
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |无限循环}} || wu2 xian4 xun2 huan2 || Begeisterungsfähigkeit???
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |無限循環}} || wu2 xian4 xun2 huan2 || (traditionelle Schreibweise von 无限循环), Begeisterungsfähigkeit???
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |废气循环}} || fei4 qi4 xun2 huan2 || Abgasrückführung, AGR
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |经济循环}} || jing1 ji4 xun2 huan2 || Konjunkturzyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环经济}} || xun2 huan2 jing1 ji4 || Kreislaufwirtschaft
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |科里循环}} || ke1 li3 xun2 huan2 || Cori-Zyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |科里循環}} || ke1 li3 xun2 huan2 || (traditionelle Schreibweise von 科里循环), Cori-Zyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |行业循环}} || hang2 ye4 xun2 huan2 || Branchenrotation
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环时间}} || xun2 huan2 shi2 jian1 || Taktzahl
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循環時間}} || xun2 huan2 shi2 jian1 || (traditionelle Schreibweise von 循环时间), Taktzahl
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |物质循环}} || wu4 zhi4 xun2 huan2 || Stoffkreislauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |字模循环}} || zi4 mo2 xun2 huan2 || Matrizenkreislauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |字模循環}} || zi4 mo2 xun2 huan2 || (traditionelle Schreibweise von 字模循环), Matrizenkreislauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |尿素循环}} || sui1 su4 xun2 huan2 || Harnstoffzyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |尿素循環}} || sui1 su4 xun2 huan2 || (traditionelle Schreibweise von 尿素循环), Harnstoffzyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环系统}} || xun2 huan2 xi4 tong3 || Blutkreislauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |生命循环}} || sheng1 ming4 xun2 huan2 || Lebenszyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |生命循環}} || sheng1 ming4 xun2 huan2 || (traditionelle Schreibweise von 生命循环), Lebenszyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |因循守旧}} || yin1 xun2 shou3 jiu4 || im alten Trott verharren, wie bisher weiter machen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |因循守舊}} || yin1 xun2 shou3 jiu4 || (traditionelle Schreibweise von 因循守旧), im alten Trott verharren, wie bisher weiter machen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循环信用证}} || xun2 huan2 xin4 yong4 zheng4 || Revolvin-Akkrediitiv
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |两冲程循环}} || liang3 chong1 cheng2 xun2 huan2 || Zweitaktmotor
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |核燃料循环}} || he2 ran2 liao4 xun2 huan2 || Brennstoffkreislauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |核燃料循環}} || he2 ran2 liao4 xun2 huan2 || (traditionelle Schreibweise von 核燃料循环), Brennstoffkreislauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |卡尔文循环}} || ka3 er3 wen2 xun2 huan2 || Calvin-Zyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |卡爾文循環}} || ka3 er3 wen2 xun2 huan2 || (traditionelle Schreibweise von 卡尔文循环), Calvin-Zyklus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |四冲程循环}} || si4 chong1 cheng2 xun2 huan2 || Viertaktmotor
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |反循环操作}} || fan3 xun2 huan2 cao1 zuo4 || antizyklisches Vorgehen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |反循環操作}} || fan3 xun2 huan2 cao1 zuo4 || (traditionelle Schreibweise von 反循环操作), antizyklisches Vorgehen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冷却水循环}} || leng3 que4 shui3 xun2 huan2 || Kühlwasserumlauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |冷卻水循環}} || leng3 que4 shui3 xun2 huan2 || (traditionelle Schreibweise von 冷却水循环), Kühlwasserumlauf
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循化撒拉族自治县}} || xun2 hua4 sa3 la1 zu2 zi4 zhi4 xian4 || Autonomer Kreis Xunhua der Salar (Provinz Qinghai,China)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循化撒拉族自治縣}} || xun2 hua4 sa3 la1 zu2 zi4 zhi4 xian4 || (traditionelle Schreibweise von 循化撒拉族自治县), Autonomer Kreis Xunhua der Salar (Provinz Qinghai,China)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |材料循环的闭合过程}} || cai2 liao4 xun2 huan2 de5 bi4 he2 guo4 cheng2 || geschlossener Stoffkreislauf, Stoffstrom
|}
=== 拣 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挑拣}} || tiao1 jian3 || verlesen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |拣选}} || jian3 xuan3 || sortiert, sortieren
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |拣择}} || jian3 ze2 || (literary) to select, to choose
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |翻拣}} || fan1 jian3 || to browse and select, to glance through and check
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |拣起}} || jian3 qi3 || to pick up
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |白拣}} || bai2 jian3 || a cheap choice, to choose sth that costs nothing
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |分拣}} || fen1 jian3 || to sort
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |拣起来}} || jian3 qi3 lai2 || etwas (vom Boden) aufheben
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挑拣机}} || tiao3 jian3 ji1 || Sortiermaschine
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |拣信室}} || jian3 xin4 shi4 || mail sorting office
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |垃圾分拣}} || la1 ji1 fen4 jian3 || Abfallsortierung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挑三拣四}} || tiao1 san1 jian3 si4 || pingelig
|-
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |拣佛烧香}} || jian3 fo2 shao1 xiang1 || to choose which Buddha to burn incense to; fig. to curry favor from the right person
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |暴力分拣}} || bao4 li4 fen1 jian3 || rough handling of parcels during mail sorting
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |拣饮择食}} || jian3 yin3 ze2 shi2 || to choose one's food carefully, to be picky
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |打孔卡片分拣机}} || da3 kong3 ka3 pian4 fen4 jian3 ji1 || Lochkartenmaschine
|}
=== 箕 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |筲箕}} || shao1 ji1 || Korb aus Bambus zum Waschen von Reis, Reiswaschkorb aus Bambus, Sieb aus Bambus
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |箕子}} || ji1 zi3 || Jizi
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |扶箕}} || fu2 ji1 || planchette writing (for taking dictation from beyond the grave), Ouija board
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |南箕北斗}} || nan2 ji1 bei3 dou3 || the Winnowing Basket in the southern sky, and the Big Dipper in the north; sth which, despite its name, is of no practical use
|}
=== 挥 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung !! Lernhilfen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |发挥}} || fa1 hui1 || ins Spiel bringen, entfalten, entwickeln || (HSK 3.0 Band 4)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥洒}} || hui1 sa3 || besprengen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥动}} || hui1 dong4 || schwenken, schwingen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥舞}} || hui1 wu3 || flattern, wehen, herumfuchteln, schwenken, schwingen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥}} || zhi3 hui1 || Befehl, Dirigent, Kommandeur, befehligen, befehlen, kommandieren, dirigieren, delegieren, führen, regeln || (HSK 3.0 Band 4)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥发}} || hui1 fa1 || Flatterhaftigkeit, Flüchtigkeit, Verflüchtigung, verflüchtigen (von Flüssig zu Gas)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥毫}} || hui1 hao2 || mit einem Pinsel schreiben oder malen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥手}} || hui1 shou3 || winken (mit der Hand), wehen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥家}} || zhi3 hui1 jia1 || Dirigent
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |总指挥}} || zong3 zhi3 hui1 || General Direktor
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |易挥发}} || yi4 hui1 fa1 || volatil
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥发物}} || hui1 fa1 wu4 || flüchtiger Stoff
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥台}} || zhi3 hui1 tai2 || Befehlsstand, Plattform, Podium
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥部}} || zhi3 hui1 bu4 || Hauptquartier, Kommandozentrale
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥发性}} || hui1 fa1 xing4 || flüchtig(Adj, Phys)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥者}} || zhi3 hui1 zhe3 || Dirigent, Zugbegleiterin, Zugbegleiter (Schaffner)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥权}} || zhi3 hui1 quan2 || Befehl, Kommando
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥官}} || zhi3 hui1 guan1 || Befehlshaber, Führer, Kommandeur
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥器}} || zhi3 hui1 qi4 || Blinkanlage
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥棒}} || zhi3 hui1 bang4 || Kommandostab, Lesestift, Stock, Taktstock
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |发挥作用}} || fa1 hui1 zuo4 yong4 || in Funktion treten, Wirkung entfalten
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥中心}} || zhi3 hui1 zhong1 xin1 || Kommandozentrale, Schaltzentrale
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |首席指挥}} || shou3 xi2 zhi3 hui1 || Chefdirigent
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥金如土}} || hui1 jin1 ru2 tu3 || Geld mit vollen Händen ausgeben, mit Geld um sich schmeißen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |呼来挥去}} || hu1 lai2 hui1 qu4 || hin und her scheuchen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥汗如雨}} || hui1 han4 ru2 yu3 || schweißgebadet
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |自我发挥}} || zi4 wo3 fa1 hui1 || Selbstentfaltung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |乐队指挥}} || yue4 dui4 zhi3 hui1 || Dirigent, Kapellmeister
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥之不去}} || hui1 zhi1 bu4 qu4 || nicht vertreiben können
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |借题发挥}} || jie4 ti2 fa1 hui1 || Ausnutzen, dass ein Thema angesprochen wurde und seine eigenen Ideen darlegen, die Chance nutzen und seine eigene Gedanken darlegen
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |发挥影响}} || fa1 hui1 ying3 xiang3 || Einflussnahme
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |挥汗成雨}} || hui1 han4 cheng2 yu3 || schweißgebadet
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |军事指挥部}} || jun1 shi4 zhi3 hui1 bu4 || Militärführung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |最高指挥官}} || zui4 gao1 zhi3 hui1 guan1 || Oberbefehlshaber
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |合唱指挥家}} || he2 chang4 zhi3 hui1 jia1 || Kantor
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |指挥官基恩}} || zhi3 hui1 guan1 ji1 en1 || Commander Keen (Computerspiel-Serie)
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |最高陆军指挥}} || zui4 gao1 lu4 jun1 zhi3 hui1 || Oberste Heeresleitung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |海军战争指挥}} || hai3 jun1 zhan4 zheng1 zhi3 hui1 || Seekriegsleitung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |发挥着重要作用}} || fa1 hui1 zhuo2 zhong4 yao4 zuo4 yong4 || eine wichtige Funktion ausüben
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |发挥重要的作用}} || fa1 hui1 zhong4 yao4 de5 zuo4 yong4 || eine wichtige Rolle spielen
|}
== Sätze ==
=== 秽 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |家长指导:如果你的孩子用TATOEBA学语言,请花时间搜索任何你不希望他们读到的词——并且不要害羞!你不会相信他们在这里允许了什么样的未审查的污秽,既然他们认为“语言就是语言”。}} || jia1 chang2/zhang3 zhi3 dao3 : ru2 guo3 ni3 de5 hai2 zi5 yong4 TATOEBA xue2 yu3 yan2 , qing3 hua1 shi2 jian1 sou1 suo2 ren4 he2 ni3 bu4 xi1 wang4 ta1 men5 du2 dao4 de5 ci2 —— bing4 qie3 bu4 yao4 hai4 xiu1 ! ni3 bu4 hui4 xiang1/xiang4 xin4 ta1 men5 zai4 zhe4/zhei4 li3 yun3 xu3 le5 shi2 me5 yang4 de5 wei4 shen3 cha2 de5 wu1 hui4 , ji4 ran2 ta1 men5 ren4 wei2/wei4 “ yu3 yan2 jiu4 shi4 yu3 yan2 ”。|| HINWEIS FÜR ELTERN: Falls Ihre Kinder TATOEBA für den Fremdsprachenerwerb nutzen wollen, nehmen Sie sich bitte die Zeit und suchen Sie nach beliebigen Wörtern Ihrer Wahl, welche Sie sie nicht lesen lassen mögen - und seien Sie nicht zimperlich! Sie wären erstaunt, welche sprachlichen Abgründe mit der Begründung "Sprache sei nun mal Sprache" unzensiert bleiben. (Mandarin, [https://tatoeba.org/eng/sentences/show/7755639 Tatoeba] [https://tatoeba.org/eng/user/profile/la_kanro la_kanro] [https://tatoeba.org/eng/user/profile/kroko kroko])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |污秽导致疾病。}} || wu1 hui4 dao3 zhi4 ji2 bing4 。|| Unsauberkeit verursacht Krankheiten. (Mandarin, [https://tatoeba.org/eng/sentences/show/347707 Tatoeba] [https://tatoeba.org/eng/user/profile/zhouj1955 zhouj1955] [https://tatoeba.org/eng/user/profile/Ole Ole])
|}
=== 循 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |尊重循环的规则是很重要的。}} || zun1 chong2/zhong4 xun2 huan2 de5 gui1 ze2 shi4 hen3 chong2/zhong4 yao4 de5 。|| Es ist sehr wichtig, die Verkehrsregeln zu beachten. (Mandarin, [https://tatoeba.org/eng/sentences/show/3579714 Tatoeba] [https://tatoeba.org/eng/user/profile/CLARET CLARET] [https://tatoeba.org/eng/user/profile/Bellinger Bellinger])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |您應遵循你老師的建議。}} || nin2 ying1/ying4 zun1 xun2 ni3 lao3 shi1 de5 jian4 yi4 。|| Du solltest die Ratschläge deiner Lehrerin befolgen. (Mandarin, [https://tatoeba.org/eng/sentences/show/872156 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/wolfgangth wolfgangth])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |使用这个信息时,我当然会遵循您的要求。}} || shi3/shi4 yong4 zhe4/zhei4 ge4 xin4 xi1 shi2 , wo3 dang1/dang4 ran2 hui4 zun1 xun2 nin2 de5 yao4 qiu2 。|| When using this information, I will of course follow your requirements. (Mandarin, [https://tatoeba.org/eng/sentences/show/827102 Tatoeba] [https://tatoeba.org/eng/user/profile/GlossaMatik GlossaMatik] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |回答把我们带入了一个恶性循环。}} || hui2 da2 ba3 wo3 men5 dai4 ru4 le5 yi1 ge4 e4/wu4 xing4 xun2 huan2 。|| Die Antwort führt uns in einen Teufelskreis. (Mandarin, [https://tatoeba.org/eng/sentences/show/503262 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他没有遵循我们的忠告。}} || ta1 mei2/mo4 you3 zun1 xun2 wo3 men5 de5 zhong1 gao4 。|| He failed to follow our advice. (Mandarin, [https://tatoeba.org/eng/sentences/show/836332 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |您应遵循你老师的建议。}} || nin2 ying1/ying4 zun1 xun2 ni3 lao3 shi1 de5 jian4 yi4 。|| Du solltest die Ratschläge deiner Lehrerin befolgen. (Mandarin, [https://tatoeba.org/eng/sentences/show/872156 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/wolfgangth wolfgangth])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |学习是一个循序渐进的过程。}} || xue2 xi2 shi4 yi1 ge4 xun2 xu4 jian1/jian4 jin4 de5 guo4 cheng2 。|| Lernen ist ein schrittweiser Vorgang. (Mandarin, [https://tatoeba.org/eng/sentences/show/2555339 Tatoeba] [https://tatoeba.org/eng/user/profile/fenfang557 fenfang557] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他沒有遵循我們的忠告。}} || ta1 mei2/mo4 you3 zun1 xun2 wo3 men5 de5 zhong1 gao4 。|| He failed to follow our advice. (Mandarin, [https://tatoeba.org/eng/sentences/show/836332 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不过,除了佛教者以外,没有任何人可以一直遵循这个原则。}} || bu4 guo4 , chu2 le5 fo2 jiao1 zhe3 yi3 wai4 , mei2/mo4 you3 ren4 he2 ren2 ke3/ke4 yi3 yi1 zhi2 zun1 xun2 zhe4/zhei4 ge4 yuan2 ze2 。|| However, apart from Buddhists, hardly anyone can consistently follow this principle. (Mandarin, [https://tatoeba.org/eng/sentences/show/915544 Tatoeba] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |请遵循护士的指导。}} || qing3 zun1 xun2 hu4 shi4 de5 zhi3 dao3 。|| Folgen Sie bitte den Anleitungen der Krankenschwester. (Mandarin, [https://tatoeba.org/eng/sentences/show/686643 Tatoeba] [https://tatoeba.org/eng/user/profile/offdare offdare] [https://tatoeba.org/eng/user/profile/Grim_fandango Grim_fandango])
|}
=== 拣 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不要对人家送的礼物挑三拣四,嫌东嫌西的。}} || bu4 yao4 dui4 ren2 jia1 song4 de5 li3 wu4 tao1/tiao1/tiao3 san1 jian3 si4 , xian2 dong1 xian2 xi1 de5 。|| Einem geschenkten Gaul schaut man nicht ins Maul. (Mandarin, [https://tatoeba.org/eng/sentences/show/806205 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|}
=== 箕 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|}
=== 挥 ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她挥了挥手。}} || ta1 hui1 le5 hui1 shou3 。|| Sie winkte. (Mandarin, [https://tatoeba.org/eng/sentences/show/8969849 Tatoeba] [https://tatoeba.org/eng/user/profile/WilsonWong WilsonWong] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她边挥手边微笑著。}} || ta1 bian1 hui1 shou3 bian1 wei2 xiao4 zhao1/zhu4/zhuo2 。|| She smiled, waving her hand. (Mandarin, [https://tatoeba.org/eng/sentences/show/361702 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/CM CM])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她挥着她的手,直到火车消失在视线之外。}} || ta1 hui1 zhao2/zhe2 ta1 de5 shou3 , zhi2 dao4 huo3 che1 xiao1 shi1 zai4 shi4 xian4 zhi1 wai4 。|| Sie winkte, bis der Zug außer Sichtweite war. (Mandarin, [https://tatoeba.org/eng/sentences/show/332506 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他尖刻的话语仍然在我心中挥之不去。}} || ta1 jian1 ke4 de5 hua4 yu3 reng2 ran2 zai4 wo3 xin1 zhong1/zhong4 hui1 zhi1 bu4 qu4 。|| Seine bitteren Worte wurmen mich noch immer. (Mandarin, [https://tatoeba.org/eng/sentences/show/3076572 Tatoeba] [https://tatoeba.org/eng/user/profile/tommyfang95 tommyfang95] [https://tatoeba.org/eng/user/profile/PeterR PeterR])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |因为你们公司的业务能够发挥我的特长。}} || yin1 wei2/wei4 ni3 men5 gong1 si1 de5 ye4 wu4 neng2 gou4 fa1 hui1 wo3 de5 te2/te4 chang2/zhang3 。|| Because your business can play to my strengths. (Mandarin, [https://tatoeba.org/eng/sentences/show/420986 Tatoeba] [https://tatoeba.org/eng/user/profile/sysko sysko] [https://tatoeba.org/eng/user/profile/astriddegaste astriddegaste])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |在我们头顶飞舞著的沙粒,在我们手中挥动著的刀剑……它们不是甚麼,只不过是在夜空中擦过的一朵朵流星。}} || zai4 wo3 men5 tou2 ding3 fei1 舞 zhao1/zhu4/zhuo2 de5 sha1 li4 , zai4 wo3 men5 shou3 zhong1/zhong4 hui1 dong4 zhao1/zhu4/zhuo2 de5 dao1 jian4 …… ta1/tuo2 men5 bu4 shi4 shen4 me5 , zhi3 bu4 guo4 shi4 zai4 ye4 kong1/kong4 zhong1/zhong4 ca1 guo4 de5 yi1 duo3 duo3 liu2 xing1 。|| Der wirbelnde Sand über unseren Köpfen, das Schleudern unserer Schwerter... sie sind nichts als fallende Sterne am Nachthimmel. (Mandarin, [https://tatoeba.org/eng/sentences/show/716872 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/BraveSentry BraveSentry])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他后悔自己的挥金如土。}} || ta1 hou4 hui3 zi4 ji3 de5 hui1 jin1 ru2 tu3 。|| He regrets his having wasted his money. (Mandarin, [https://tatoeba.org/eng/sentences/show/1397037 Tatoeba] [https://tatoeba.org/eng/user/profile/mtdot mtdot] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她完全没有出外的心情,因为那种突然失去父亲的痛苦,一直在她的心头挥之不去。}} || ta1 wan2 quan2 mei2/mo4 you3 chu1 wai4 de5 xin1 qing2 , yin1 wei2/wei4 na4/nei4 chong2/zhong3/zhong4 tu1 ran2 shi1 qu4 fu4 qin1 de5 tong4 ku3 , yi1 zhi2 zai4 ta1 de5 xin1 tou2 hui1 zhi1 bu4 qu4 。|| The shock of her father's death lingered on and she didn't feel like going out at all. (Mandarin, [https://tatoeba.org/eng/sentences/show/425371 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/papabear papabear])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她挥著手向他打招呼。}} || ta1 hui1 zhao1/zhu4/zhuo2 shou3 xiang4 ta1 da3 zhao1 hu1 。|| Sie begrüßte ihn winkend. (Mandarin, [https://tatoeba.org/eng/sentences/show/802084 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆挥手了。}} || tang1 mu3 hui1 shou3 le5 。|| Tom winkte. (Mandarin, [https://tatoeba.org/eng/sentences/show/5102356 Tatoeba] [https://tatoeba.org/eng/user/profile/mirrorvan mirrorvan] [https://tatoeba.org/eng/user/profile/Hans_Adler Hans_Adler])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆最近在工作中发挥不太好。}} || tang1 mu3 zui4 jin4 zai4 gong1 zuo4 zhong1/zhong4 fa1 hui1 bu4 tai4 hao3 。|| Tom has not been doing very well at work recently. (Mandarin, [https://tatoeba.org/eng/sentences/show/2485269 Tatoeba] [https://tatoeba.org/eng/user/profile/fenfang557 fenfang557] [https://tatoeba.org/eng/user/profile/astriddegaste astriddegaste])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |掌管指挥所。}} || zhang3 guan3/guan5 zhi3 hui1 suo3 。|| Übernehmen Sie die Führung des Gefechtsstandes! (Mandarin, [https://tatoeba.org/eng/sentences/show/816772 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/al_ex_an_der al_ex_an_der])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这本书会让你发挥想像力。}} || zhe4/zhei4 ben3 shu1 hui4 rang4 ni3 fa1 hui1 xiang3 xiang4 li4 。|| Dieses Buch wird deine Fantasie anregen. (Mandarin, [https://tatoeba.org/eng/sentences/show/425936 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Tamy Tamy])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |现代战术并无指明士兵必须全副武装上阵才能发挥其最大的战斗力。}} || xian4 dai4 zhan4 shu4 bing4 wu2 zhi3 ming2 shi4 bing1 bi4 xu1 quan2 fu1/fu4 wu3 zhuang1 shang4 zhen4 cai2 neng2 fa1 hui1 qi2 zui4 da4 de5 zhan4 dou4 li4 。|| Die Kunst der modernen Kriegsführung benötigt nicht zwangsläufig bis an die Zähne bewaffnete Soldaten, damit diese als Kämpfer effektiv sind. (Mandarin, [https://tatoeba.org/eng/sentences/show/1097586 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Kuraimegami Kuraimegami])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |火车开出的时候,他们都挥手向父母道别。}} || huo3 che1 kai1 chu1 de5 shi2 hou4 , ta1 men5 dou1/du1 hui1 shou3 xiang4 fu4 mu3 dao4 bie2 。|| Als der Zug abfuhr, winkten sie ihren Eltern zum Abschied. (Mandarin, [https://tatoeba.org/eng/sentences/show/526558 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Yorwba Yorwba])
|}
=== einzusortieren ===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循序渐进}} || xun2 xu4 jian1/jian4 jin4 || to proceed in an orderly way, step by step; to follow the established order; to make steady progress incrementally([[wikt:en:循序渐进|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |盛猪羊狗血并秽物准备}} || sheng4 zhu1 yang2 gou3 xie3/xue4 bing4 hui4 wu4 zhun3 bei4 ||They were to prepare the contaminant made from the blood of pigs, rams and dogs. ([[s:en:Special:PermanentLink/5495657 |Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第002回 | 三國演義/第002回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |兄醉矣!}} || xiong1 zui4 yi3 !||You're drunk! ([[s:en:Special:PermanentLink/5495659 |Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第003回 | 三國演義/第003回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |今朝有酒今朝醉}} || jin1 chao2/zhao1 you3 jiu3 jin1 chao2/zhao1 zui4 || Literally: If there is wine today, then today is the day to get drunk. describes someone with attitude of instant gratification; describes someone who never thinks about the future; here today, gone tomorrow; live for the now ([[wikt:en:今朝有酒今朝醉|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |就桃园中痛饮一醉。}} || jiu4 tao2 yuan2 zhong1/zhong4 tong4 yin3 yi1 zui4 。||they proceeded to get thoroughly drunk in the peach garden. ([[s:en:Special:PermanentLink/5776532 |Wikisource: Romance of the Three Kingdoms]] [[s:zh:三國演義/第001回 | 三國演義/第001回]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |又说:从人里面出来的,那才能污秽人; }} || you4 shuo1 : cong2 ren2 li3 mian4 chu1 lai2 de5 , na4/nei4 cai2 neng2 wu1 hui4 ren2 ; ||7.20 Er sagte aber: Was aus dem Menschen ausgeht, das verunreinigt den Menschen. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Markusevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这一切的恶都是从里面出来,且能污秽人。 }} || zhe4/zhei4 yi1 qie1 de5 e4/wu4 dou1/du1 shi4 cong2 li3 mian4 chu1 lai2 , qie3 neng2 wu1 hui4 ren2 。 ||7.23 alle diese bösen Dinge gehen von innen heraus und verunreinigen den Menschen. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Markusevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |从外面进去的不能污秽人,惟有从里面出来的乃能污秽人。(有古卷在此有: }} || cong2 wai4 mian4 jin4 qu4 de5 bu4 neng2 wu1 hui4 ren2 , wei2 you3 cong2 li3 mian4 chu1 lai2 de5 nai3 neng2 wu1 hui4 ren2 。( you3 gu3 juan3 zai4 ci3 you3 : ||7.15 Da ist nichts, was von außerhalb des Menschen in denselben eingeht, das ihn verunreinigen kann, sondern was von ihm ausgeht, das ist es, was den Menschen verunreinigt. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Markusevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |15.11入口的不能污秽人,出口的乃能污秽人。}} || 15.11 ru4 kou3 de5 bu4 neng2 wu1 hui4 ren2 , chu1 kou3 de5 nai3 neng2 wu1 hui4 ren2 。|| 15.11 Nicht was in den Mund eingeht, verunreinigt den Menschen, sondern was aus dem Munde ausgeht, das verunreinigt den Menschen. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Matthäusevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |15.20这都是污秽人的;至於不洗手吃饭,那却不污秽人。}} || 15.20 zhe4/zhei4 dou1/du1 shi4 wu1 hui4 ren2 de5 ; zhi4 yu2 bu4 xi3/xian3 shou3 chi1 fan4 , na4/nei4 que4 bu4 wu1 hui4 ren2 。|| 15.20 diese Dinge sind es, die den Menschen verunreinigen, aber mit ungewaschenen Händen essen verunreinigt den Menschen nicht. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Matthäusevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |15.18惟独出口的,是从心里发出来的,这才污秽人。}} || 15.18 wei2 du2 chu1 kou3 de5 , shi4 cong2 xin1 li3 fa1 chu1 lai2 de5 , zhe4/zhei4 cai2 wu1 hui4 ren2 。|| 15.18 Was aber aus dem Munde ausgeht, kommt aus dem Herzen hervor, und das verunreinigt den Menschen. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Matthäusevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |命司徒,循行县鄙。命农勉作,无伏于都。}} || ming4 si1 tu2 , xun2 hang2/xing2 xian4 bi3 。 ming4 nong2 mian3 zuo4 , wu2 fu2 yu2 dou1/du1 。||Der Unterrichtsminister erhält den Befehl, in den Städten und Dörfern herumzureisen, um die Bauern zu fleißiger Arbeit anzuhalten und zu verhindern, daß sie sich in den Städten herumtreiben. ([http://ctext.org/lv-shi-chun-qiu/zhs Lü Bu We] [http://www.zeno.org/pnd/119012251 Richard Wilhelm])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我这话不是指着你们众人说的,我知道我所拣选的是谁。现在要应验经上的话,说:同我吃饭的人用脚踢我。 }} || wo3 zhe4/zhei4 hua4 bu4 shi4 zhi3 zhao2/zhe2 ni3 men5 zhong4 ren2 shuo1 de5 , wo3 zhi1 dao4 wo3 suo3 jian3 xuan3 de5 shi4 shei2 。 xian4 zai4 yao4 ying1/ying4 yan4 jing4 shang4 de5 hua4 , shuo1 : tong2 wo3 chi1 fan4 de5 ren2 yong4 jiao3 ti1 wo3 。 ||13.18 Ich rede nicht von euch allen, ich weiß, welche ich auserwählt habe; aber auf daß die Schrift erfüllt würde: "Der mit mir das Brot ißt, hat seine Ferse wider mich aufgehoben". ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Johannesevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |13.48网既满了,人就拉上岸来,坐下,拣好的收在器具里,将不好的丢弃了。}} || 13.48 wang3 ji4 man3 le5 , ren2 jiu4 la1 shang4 an4 lai2 , zuo4 xia4 , jian3 hao3 de5 shou1 zai4 qi4 ju4 li3 , jiang1/jiang4 bu4 hao3 de5 diu1 qi4 le5 。|| 13.48 als es voll war, ans Ufer heraufgezogen hatten; und sie setzten sich nieder und lasen die Guten in Gefäße zusammen, aber die Faulen warfen sie aus. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Matthäusevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你们若属世界,世界必爱属自己的;只因你们不属世界,乃是我从世界中拣选了你们,所以世界就恨你们。 }} || ni3 men5 ruo4 shu3 shi4 jie4 , shi4 jie4 bi4 ai4 shu3 zi4 ji3 de5 ; zhi3 yin1 ni3 men5 bu4 shu3 shi4 jie4 , nai3 shi4 wo3 cong2 shi4 jie4 zhong1/zhong4 jian3 xuan3 le5 ni3 men5 , suo3 yi3 shi4 jie4 jiu4 hen4 ni3 men5 。 ||15.19 Wenn ihr von der Welt wäret, würde die Welt das Ihrige lieben; weil ihr aber nicht von der Welt seid, sondern ich euch aus der Welt auserwählt habe, darum haßt euch die Welt. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Johannesevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |有声音从云彩里出来,说:这是我的儿子,我所拣选的(有古卷:这是我的爱子),你们要听他。 }} || you3 sheng1 yin1 cong2 yun2 cai4 li3 chu1 lai2 , shuo1 : zhe4/zhei4 shi4 wo3 de5 er2/er5 zi5 , wo3 suo3 jian3 xuan3 de5 ( you3 gu3 juan3 : zhe4/zhei4 shi4 wo3 de5 ai4 zi5 ), ni3 men5 yao4 ting1 ta1 。 ||9.35 und es geschah eine Stimme aus der Wolke, welche sagte: Dieser ist mein geliebter Sohn, ihn höret. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Lukasevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |24.49就动手打他的同伴,又和酒醉的人一同吃喝。}} || 24.49 jiu4 dong4 shou3 da3 ta1 de5 tong2 ban4 , you4 he2/he4/huo2 jiu3 zui4 de5 ren2 yi1 tong2 chi1 he1 。|| 24.49 und anfängt, seine Mitknechte zu schlagen, und ißt und trinkt mit den Trunkenen, ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Matthäusevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那仆人若心里说:我的主人必来得迟,就动手打仆人和使女,并且吃喝醉酒; }} || na4/nei4 pu2 ren2 ruo4 xin1 li3 shuo1 : wo3 de5 zhu3 ren2 bi4 lai2 de2/de5/dei3 chi2/zhi4 , jiu4 dong4 shou3 da3 pu2 ren2 he2/he4/huo2 shi3/shi4 nü3/ru3 , bing4 qie3 chi1 he1 zui4 jiu3 ; ||12.45 Wenn aber jener Knecht in seinem Herzen sagt: Mein Herr verzieht zu kommen, und anfängt, die Knechte und Mägde zu schlagen und zu essen und zu trinken und sich zu berauschen, ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Lukasevangelium]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |污秽导致疾病。}} || wu1 hui4 dao3 zhi4 ji2 bing4 。||Unsauberkeit verursacht Krankheiten. ([https://tatoeba.org/eng/sentences/show/347707 Tatoeba] [https://tatoeba.org/eng/user/profile/zhouj1955 zhouj1955] [https://tatoeba.org/eng/user/profile/Ole Ole])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |尊重循环的规则是很重要的。}} || zun1 chong2/zhong4 xun2 huan2 de5 gui1 ze2 shi4 hen3 chong2/zhong4 yao4 de5 。||Es ist sehr wichtig, die Verkehrsregeln zu beachten. ([https://tatoeba.org/eng/sentences/show/3579714 Tatoeba] [https://tatoeba.org/eng/user/profile/CLARET CLARET] [https://tatoeba.org/eng/user/profile/Bellinger Bellinger])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |使用这个信息时,我当然会遵循您的要求。}} || shi3/shi4 yong4 zhe4/zhei4 ge4 xin4 xi1 shi2 , wo3 dang1/dang4 ran2 hui4 zun1 xun2 nin2 de5 yao4 qiu2 。||When using this information, I will of course follow your requirements. ([https://tatoeba.org/eng/sentences/show/827102 Tatoeba] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他沒有遵循我們的忠告。}} || ta1 mei2/mo4 you3 zun1 xun2 wo3 men5 de5 zhong1 gao4 。||He failed to follow our advice. ([https://tatoeba.org/eng/sentences/show/836332 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不过,除了佛教者以外,没有任何人可以一直遵循这个原则。}} || bu4 guo4 , chu2 le5 fo2 jiao1 zhe3 yi3 wai4 , mei2/mo4 you3 ren4 he2 ren2 ke3/ke4 yi3 yi1 zhi2 zun1 xun2 zhe4/zhei4 ge4 yuan2 ze2 。||However, apart from Buddhists, hardly anyone can consistently follow this principle. ([https://tatoeba.org/eng/sentences/show/915544 Tatoeba] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |回答把我们带入了一个恶性循环。}} || hui2 da2 ba3 wo3 men5 dai4 ru4 le5 yi1 ge4 e4/wu4 xing4 xun2 huan2 。||Die Antwort führt uns in einen Teufelskreis. ([https://tatoeba.org/eng/sentences/show/503262 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他喝酒醉無法開車回家。}} || ta1 he1 jiu3 zui4 wu2 fa3 kai1 che1 hui2 jia1 。||Er ist zu betrunken, um nach Hause zu fahren. Er war zu betrunken, um heimfahren zu können. ([https://tatoeba.org/eng/sentences/show/879190 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Espi Espi] [https://tatoeba.org/eng/user/profile/Manfredo Manfredo])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他非常醉了。}} || ta1 fei1 chang2 zui4 le5 。||He's really drunk. ([https://tatoeba.org/eng/sentences/show/1202589 Tatoeba] [https://tatoeba.org/eng/user/profile/Vortarulo Vortarulo] [https://tatoeba.org/eng/user/profile/alec alec])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他不太能喝酒,但是朋友都喜欢喝,所以他往往会喝醉。}} || ta1 bu4 tai4 neng2 he1 jiu3 , dan4 shi4 peng2 you3 dou1/du1 xi3 欢 he1 , suo3 yi3 ta1 wang3/wang4 wang3/wang4 hui4 he1 zui4 。||He's not a big drinker, but his friends all like to drink, so he often gets drunk. ([https://tatoeba.org/eng/sentences/show/789038 Tatoeba] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |在麻醉剂的作用下,他昏了过去。}} || zai4 ma2 zui4 ji4 de5 zuo4 yong4 xia4 , ta1 昏 le5 guo4 qu4 。||Er verlor das Bewusstsein unter dem Einfluss des Betäubungsmittels. ([https://tatoeba.org/eng/sentences/show/1742518 Tatoeba] [https://tatoeba.org/eng/user/profile/sysko sysko] [https://tatoeba.org/eng/user/profile/Dejo Dejo])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这本书里错误多得以至于老师把它叫作“醉鬼版”。}} || zhe4/zhei4 ben3 shu1 li3 cuo4 wu4 duo1 de2/de5/dei3 yi3 zhi4 yu2 lao3 shi1 ba3 ta1/tuo2 jiao4 zuo4 “ zui4 gui3 ban3 ”。||Dieses Buch ist so voller Fehler, dass der Lehrer es die „Schluckspechtedition“ getauft hat. ([https://tatoeba.org/eng/sentences/show/433237 Tatoeba] [https://tatoeba.org/eng/user/profile/FeuDRenais FeuDRenais] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她看起來好像喝醉了。}} || ta1 kan4 qi3 lai2 hao3 xiang4 he1 zui4 le5 。||She looks as if she were drunk. ([https://tatoeba.org/eng/sentences/show/891042 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他醉得忘了把门关上。}} || ta1 zui4 de2/de5/dei3 wang4 le5 ba3 men2 guan1 shang4 。||Er war betrunken und hat vergessen, die Hintertür zu schließen. ([https://tatoeba.org/eng/sentences/show/862328 Tatoeba] [https://tatoeba.org/eng/user/profile/edelyn90 edelyn90] [https://tatoeba.org/eng/user/profile/stefz stefz])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我喝醉了,但是还会说德语。}} || wo3 he1 zui4 le5 , dan4 shi4 hai2/huan2 hui4 shuo1 de2 yu3 。||Ich bin besoffen, aber ich kann noch Deutsch sprechen. Ich bin besoffen, aber ich kann immer noch Deutsch sprechen. ([https://tatoeba.org/eng/sentences/show/778932 Tatoeba] [https://tatoeba.org/eng/user/profile/sysko sysko] [https://tatoeba.org/eng/user/profile/BraveSentry BraveSentry])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你是不是喝醉到能再说一遍德语的程度?}} || ni3 shi4 bu4 shi4 he1 zui4 dao4 neng2 zai4 shuo1 yi1 bian4 de2 yu3 de5 cheng2 du4 ?||Bist du wieder besoffen genug zum Deutschsprechen? ([https://tatoeba.org/eng/sentences/show/780152 Tatoeba] [https://tatoeba.org/eng/user/profile/U2FS U2FS] [https://tatoeba.org/eng/user/profile/sysko sysko])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我喝醉了,做不到。}} || wo3 he1 zui4 le5 , zuo4 bu4 dao4 。||I'm too drunk to do that. ([https://tatoeba.org/eng/sentences/show/6146503 Tatoeba] [https://tatoeba.org/eng/user/profile/verdastelo9604 verdastelo9604] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |警察醉了。}} || jing3 察 zui4 le5 。||The policeman was drunk. ([https://tatoeba.org/eng/sentences/show/5856741 Tatoeba] [https://tatoeba.org/eng/user/profile/verdastelo9604 verdastelo9604] [https://tatoeba.org/eng/user/profile/Aeetlrcreejl Aeetlrcreejl])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他醉心于爵士乐。}} || ta1 zui4 xin1 yu2 jue2 shi4 le4/yue4 。||Er ist verrückt nach Jazz. ([https://tatoeba.org/eng/sentences/show/343968 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/Chris Chris])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他喜歡喝爱啤酒,而且每天都喝醉。}} || ta1 xi3 歡 he1 ai4 pi2 jiu3 , er2 qie3 mei3 tian1 dou1/du1 he1 zui4 。||He really loves beer and gets drunk every day. ([https://tatoeba.org/eng/sentences/show/1173237 Tatoeba] [https://tatoeba.org/eng/user/profile/egg0073 egg0073] [https://tatoeba.org/eng/user/profile/eastasiastudent eastasiastudent])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆有点醉。}} || tang1 mu3 you3 dian3 zui4 。||Tom war etwas angetrunken. ([https://tatoeba.org/eng/sentences/show/5911617 Tatoeba] [https://tatoeba.org/eng/user/profile/verdastelo9604 verdastelo9604] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆完全喝醉了。}} || tang1 mu3 wan2 quan2 he1 zui4 le5 。||Tom ist ziemlich betrunken. ([https://tatoeba.org/eng/sentences/show/1691741 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他喝啤酒喝醉了。}} || ta1 he1 pi2 jiu3 he1 zui4 le5 。||Er hat sich mit Bier betrunken. ([https://tatoeba.org/eng/sentences/show/344165 Tatoeba] [https://tatoeba.org/eng/user/profile/nickyeow nickyeow] [https://tatoeba.org/eng/user/profile/Zaghawa Zaghawa])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他醉了。}} || ta1 zui4 le5 。||He is drunk. ([https://tatoeba.org/eng/sentences/show/471223 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/mamat mamat])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你酒喝得太醉了不能開車。}} || ni3 jiu3 he1 de2/de5/dei3 tai4 zui4 le5 bu4 neng2 kai1 che1 。||Du bist zu betrunken um zu fahren. ([https://tatoeba.org/eng/sentences/show/844571 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Zaghawa Zaghawa])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他們兩個都喝醉了。}} || ta1 men5 liang3 ge4 dou1/du1 he1 zui4 le5 。||Sie waren alle beide betrunken. ([https://tatoeba.org/eng/sentences/show/6111771 Tatoeba] [https://tatoeba.org/eng/user/profile/verdastelo9604 verdastelo9604] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他在麻醉剂的作用下,他失去了知觉。}} || ta1 zai4 ma2 zui4 ji4 de5 zuo4 yong4 xia4 , ta1 shi1 qu4 le5 zhi1 jiao4/jue2 。||Er verlor das Bewusstsein unter dem Einfluss des Betäubungsmittels. ([https://tatoeba.org/eng/sentences/show/761048 Tatoeba] [https://tatoeba.org/eng/user/profile/vgigregg vgigregg] [https://tatoeba.org/eng/user/profile/Dejo Dejo])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我宿醉了。}} || wo3 su4/xiu4 zui4 le5 。||Ich habe einen Kater. ([https://tatoeba.org/eng/sentences/show/2853144 Tatoeba] [https://tatoeba.org/eng/user/profile/Tximist Tximist] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |所有人都喝醉了。}} || suo3 you3 ren2 dou1/du1 he1 zui4 le5 。||Everyone was drunk. ([https://tatoeba.org/eng/sentences/show/4148172 Tatoeba] [https://tatoeba.org/eng/user/profile/sissima sissima] [https://tatoeba.org/eng/user/profile/Hybrid Hybrid])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你觉得,世人皆醉你独醒。}} || ni3 jiao4/jue2 de2/de5/dei3 , shi4 ren2 jie1 zui4 ni3 du2 xing3 。||Deiner Meinung nach ist die gesamte Menschheit im Irrtum; du allein bist im Besitz der Wahrheit. ([https://tatoeba.org/eng/sentences/show/1551893 Tatoeba] [https://tatoeba.org/eng/user/profile/Gustav249 Gustav249] [https://tatoeba.org/eng/user/profile/al_ex_an_der al_ex_an_der])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我有點醉了。}} || wo3 you3 dian3 zui4 le5 。||Ich bin etwas beschwipst. ([https://tatoeba.org/eng/sentences/show/918080 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她陶醉在幸福裡。}} || ta1 tao2 zui4 zai4 xing4 fu2 li3 。||She is drunk with happiness. ([https://tatoeba.org/eng/sentences/show/919885 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Shiawase Shiawase])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |Tom昨晚喝醉了。}} || Tom zuo2 wan3 he1 zui4 le5 。||Tom war gestern Abend betrunken. ([https://tatoeba.org/eng/sentences/show/5500586 Tatoeba] [https://tatoeba.org/eng/user/profile/egg0073 egg0073] [https://tatoeba.org/eng/user/profile/dispy dispy])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |汤姆醉了。}} || tang1 mu3 zui4 le5 。||Tom war betrunken. ([https://tatoeba.org/eng/sentences/show/5142201 Tatoeba] [https://tatoeba.org/eng/user/profile/musclegirlxyp musclegirlxyp] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你醉了!}} || ni3 zui4 le5 !||Sie sind betrunken! ([https://tatoeba.org/eng/sentences/show/3364511 Tatoeba] [https://tatoeba.org/eng/user/profile/kaenif kaenif] [https://tatoeba.org/eng/user/profile/jakov jakov])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |所有人都喝醉了,除了我。}} || suo3 you3 ren2 dou1/du1 he1 zui4 le5 , chu2 le5 wo3 。||Alle waren betrunken, nur ich nicht. ([https://tatoeba.org/eng/sentences/show/4148169 Tatoeba] [https://tatoeba.org/eng/user/profile/sissima sissima] [https://tatoeba.org/eng/user/profile/Pfirsichbaeumchen Pfirsichbaeumchen])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他醉的时候,她总是哭。}} || ta1 zui4 de5 shi2 hou4 , ta1 zong3 shi4 ku1 。||Sie weint immer, wenn er betrunken ist. ([https://tatoeba.org/eng/sentences/show/1416239 Tatoeba] [https://tatoeba.org/eng/user/profile/sadhen sadhen] [https://tatoeba.org/eng/user/profile/MUIRIEL MUIRIEL])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |她不喜欢让自己丈夫喝醉。}} || ta1 bu4 xi3 欢 rang4 zi4 ji3 zhang4 fu2 he1 zui4 。||She didn't like her husband drunk. ([https://tatoeba.org/eng/sentences/show/5611465 Tatoeba] [https://tatoeba.org/eng/user/profile/verdastelo9604 verdastelo9604] [https://tatoeba.org/eng/user/profile/CK CK])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |一個醉了的男人在長椅上睡觉。}} || yi1 ge4 zui4 le5 de5 nan2 ren2 zai4 chang2/zhang3 yi3 shang4 shui4 jiao4/jue2 。||Ein Betrunkener schlief auf der Bank ausgestreckt. ([https://tatoeba.org/eng/sentences/show/677623 Tatoeba] [https://tatoeba.org/eng/user/profile/Martha Martha] [https://tatoeba.org/eng/user/profile/Hans_Adler Hans_Adler])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |什么痛苦能让你想用酒精去麻醉自己?}} || shi2 me5 tong4 ku3 neng2 rang4 ni3 xiang3 yong4 jiu3 jing1 qu4 ma2 zui4 zi4 ji3 ?||What pain are you trying to cover up with alcohol? ([https://tatoeba.org/eng/sentences/show/2453081 Tatoeba] [https://tatoeba.org/eng/user/profile/fenfang557 fenfang557])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他喝了酒,略有醉意。}} || ta1 he1 le5 jiu3 , lüe4 you3 zui4 yi4 。||Er ist betrunken und etwas angeheitert. ([https://tatoeba.org/eng/sentences/show/843537 Tatoeba] [https://tatoeba.org/eng/user/profile/fucongcong fucongcong] [https://tatoeba.org/eng/user/profile/xtofu80 xtofu80])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |亲爱的弟兄阿,我们既有这等应许,就当洁净自己,除去身体、灵魂一切的污秽,敬畏神,得以成圣。}} || qin1 ai4 de5 弟 xiong1 a1 , wo3 men5 ji4 you3 zhe4/zhei4 deng3 ying1/ying4 xu3 , jiu4 dang1/dang4 jie2 jing4 zi4 ji3 , chu2 qu4 shen1 ti3 、 ling2 hun2 yi1 qie1 de5 wu1 hui4 , jing4 wei4 shen2 , de2/de5/dei3 yi3 cheng2 sheng4 。|| Da wir nun diese Verheißungen haben, Geliebte, so laßt uns uns selbst reinigen von jeder Befleckung des Fleisches und des Geistes, indem wir die Heiligkeit vollenden in der Furcht Gottes. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Korintherbrief2]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我又看见三个污秽的灵,好像青蛙,从龙口、兽口并假先知的口中出来。}} || wo3 you4 kan4 jian4/xian4 san1 ge4 wu1 hui4 de5 ling2 , hao3 xiang4 qing1 wa1 , cong2 long2 kou3 、 shou4 kou3 bing4 jia3/jia4 xian1 zhi1 de5 kou3 zhong1/zhong4 chu1 lai2 。|| Und ich sah aus dem Munde des Drachen und aus dem Munde des Tieres und aus dem Munde des falschen Propheten drei unreine Geister kommen, wie Frösche; ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Offenbarung]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |在洁净的人,凡物都洁净;在污秽不信的人,甚麽都不洁净,连心地和天良也都污秽了。}} || zai4 jie2 jing4 de5 ren2 , fan2 wu4 dou1/du1 jie2 jing4 ; zai4 wu1 hui4 bu4 xin4 de5 ren2 , shen4 me5 dou1/du1 bu4 jie2 jing4 , lian2 xin1 de4/di4 he2/he4/huo2 tian1 liang2 ye3 dou1/du1 wu1 hui4 le5 。|| Den Reinen ist alles rein; den Befleckten aber und Ungläubigen ist nichts rein, sondern befleckt ist sowohl ihre Gesinnung, als auch ihr Gewissen. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Titusbrief]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不义的,叫他仍旧不义;污秽的,叫他仍旧污秽;为义的,叫他仍旧为义;圣洁的,叫他仍旧圣洁。}} || bu4 yi4 de5 , jiao4 ta1 reng2 jiu4 bu4 yi4 ; wu1 hui4 de5 , jiao4 ta1 reng2 jiu4 wu1 hui4 ; wei2/wei4 yi4 de5 , jiao4 ta1 reng2 jiu4 wei2/wei4 yi4 ; sheng4 jie2 de5 , jiao4 ta1 reng2 jiu4 sheng4 jie2 。|| Wer unrecht tut, tue noch unrecht, und wer unrein ist, verunreinige sich noch, und wer gerecht ist, übe noch Gerechtigkeit, und wer heilig ist, sei noch geheiligt. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Offenbarung]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |但人不都有这等知识。有人到如今因拜惯了偶像,就以为所吃的是祭偶像之物。他们的良心既然软弱,也就污秽了。}} || dan4 ren2 bu4 dou1/du1 you3 zhe4/zhei4 deng3 zhi1 zhi4 。 you3 ren2 dao4 ru2 jin1 yin1 bai4 guan4 le5 偶 xiang4 , jiu4 yi3 wei2/wei4 suo3 chi1 de5 shi4 ji4 偶 xiang4 zhi1 wu4 。 ta1 men5 de5 liang2 xin1 ji4 ran2 ruan3 ruo4 , ye3 jiu4 wu1 hui4 le5 。|| Die Erkenntnis aber ist nicht in allen, sondern etliche essen, infolge des Gewissens, das sie bis jetzt vom Götzenbilde haben, als von einem Götzenopfer, und ihr Gewissen, da es schwach ist, wird befleckt. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Korintherbrief1]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |污秽的言语一句不可出口,只要随事说造就人的好话,叫听见的人得益处。}} || wu1 hui4 de5 yan2 yu3 yi1 ju4 bu4 ke3/ke4 chu1 kou3 , zhi3 yao4 sui2 shi4 shuo1 zao4 jiu4 ren2 de5 hao3 hua4 , jiao4 ting1 jian4/xian4 de5 ren2 de2/de5/dei3 yi4 chu4 。|| Kein faules Wort gehe aus eurem Munde, sondern das irgend gut ist zur notwendigen Erbauung, auf daß es den Hörenden Gnade darreiche. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Epheserbrief]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |身体 的 循环系统 依赖 运动 保持 正常 工作。久坐 的 生活方式 对 循环系统 有害。经常 运动 对 保持 循环系统 健康 至关重要。 }} || shen1 ti3 de5 xun2 huan2 xi4 tong3 yi3 lai4 yun4 dong4 bao3 chi2 zheng4 chang2 gong1 zuo4 。 jiu3 zuo4 de5 sheng1 huo2 fang1 shi4 dui4 xun2 huan2 xi4 tong3 you3 hai4 。 jing4 chang2 yun4 dong4 dui4 bao3 chi2 xun2 huan2 xi4 tong3 jian4 kang1 zhi4 guan1 chong2/zhong4 yao4 。 || ([[b:en:English-Hanzi/Get_up_%26_get_moving| English-Hanzi]] von [[b:en:User:Efex3|Efex3]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |循序渐进}} || xun2 xu4 jian1/jian4 jin4 || ([[wikt:en:循序渐进|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |就如神从创立世界以前,在基督里拣选了我们,使我们在他面前成为圣洁,无有瑕疵;}} || jiu4 ru2 shen2 cong2 chuang1/chuang4 li4 shi4 jie4 yi3 qian2 , zai4 ji1 du1 li3 jian3 xuan3 le5 wo3 men5 , shi3/shi4 wo3 men5 zai4 ta1 mian4 qian2 cheng2 wei2/wei4 sheng4 jie2 , wu2 you3 xia2 疵;|| wie er uns auserwählt hat in ihm vor Grundlegung der Welt, daß wir heilig und tadellos seien vor ihm in Liebe; ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Epheserbrief]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |主所爱的弟兄们哪,我们本该常为你们感谢神;因为他从起初拣选了你们,叫你们因信真道,又被圣灵感动,成为圣洁,能以得救。}} || zhu3 suo3 ai4 de5 弟 xiong1 men5 na3/na5/nei3 , wo3 men5 ben3 gai1 chang2 wei2/wei4 ni3 men5 gan3 xie4 shen2 ; yin1 wei2/wei4 ta1 cong2 qi3 chu1 jian3 xuan3 le5 ni3 men5 , jiao4 ni3 men5 yin1 xin4 zhen1 dao4 , you4 bei4 sheng4 ling2 gan3 dong4 , cheng2 wei2/wei4 sheng4 jie2 , neng2 yi3 de2/de5/dei3 jiu4 。|| Wir aber sind schuldig, Gott allezeit für euch zu danken, vom Herrn geliebte Brüder, daß Gott euch von Anfang erwählt hat zur Seligkeit in Heiligung des Geistes und im Glauben an die Wahrheit, ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Thesalonikerbrief2]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |辩论已经多了,彼得就起来,说:诸位弟兄,你们知道神早已在你们中间拣选了我,叫外邦人从我口中得听福音之道,而且相信。}} || 辩 lun4 yi3 jing4 duo1 le5 , bi3 de2/de5/dei3 jiu4 qi3 lai2 , shuo1 : zhu1 wei4 弟 xiong1 , ni3 men5 zhi1 dao4 shen2 zao3 yi3 zai4 ni3 men5 zhong1/zhong4 jian1 jian3 xuan3 le5 wo3 , jiao4 wai4 bang1 ren2 cong2 wo3 kou3 zhong1/zhong4 de2/de5/dei3 ting1 fu2 yin1 zhi1 dao4 , er2 qie3 xiang1/xiang4 xin4 。||7 Als aber viel Wortwechsel entstanden war, stand Petrus auf und sprach zu ihnen: Brüder ihr wisset, daß Gott vor längerer Zeit mich unter euch auserwählt hat, daß die Nationen durch meinen Mund das Wort des Evangeliums hören und glauben sollten. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Apostelgeschichte]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |我亲爱的弟兄们,请听,神岂不是拣选了世上的贫穷人,叫他们在信上富足,并承受他所应许给那些爱他之人的国麽?}} || wo3 qin1 ai4 de5 弟 xiong1 men5 , qing3 ting1 , shen2 qi3 bu4 shi4 jian3 xuan3 le5 shi4 shang4 de5 贫 qiong2 ren2 , jiao4 ta1 men5 zai4 xin4 shang4 fu4 zu3 , bing4 承 shou4 ta1 suo3 ying1/ying4 xu3 gei3 na4/nei4 xie1 ai4 ta1 zhi1 ren2 de5 guo2 me5 ?|| Höret, meine geliebten Brüder: Hat nicht Gott die weltlich Armen auserwählt, reich zu sein im Glauben, und zu Erben des Reiches, welches er denen verheißen hat, die ihn lieben? ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Jakobusbrief]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |神也拣选了世上卑贱的,被人厌恶的,以及那无有的,为要废掉那有的。}} || shen2 ye3 jian3 xuan3 le5 shi4 shang4 bei1 jian4 de5 , bei4 ren2 yan4 e4/wu4 de5 , yi3 ji2 na4/nei4 wu2 you3 de5 , wei2/wei4 yao4 fei4 diao4 na4/nei4 you3 de5 。|| und das Unedle der Welt und das Verachtete hat Gott auserwählt, und das, was nicht ist, auf daß er das, was ist, zunichte mache, ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Korintherbrief1]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你那蒙拣选之姊妹的儿女都问你安。}} || ni3 na4/nei4 meng2 jian3 xuan3 zhi1 zi3 mei4 de5 er2/er5 nü3/ru3 dou1/du1 wen4 ni3 an1 。|| Es grüßen dich die Kinder deiner auserwählten Schwester. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Johannesbrief2]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |保罗拣选了西拉,也出去,蒙弟兄们把他交於主的恩中。}} || bao3 luo1 jian3 xuan3 le5 xi1 la1 , ye3 chu1 qu4 , meng2 弟 xiong1 men5 ba3 ta1 jiao1 yu2 zhu3 de5 en1 zhong1/zhong4 。||40 Paulus aber erwählte sich Silas und zog aus, von den Brüdern der Gnade Gottes befohlen. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Apostelgeschichte]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |这以色列民的神拣选了我们的祖宗,当民寄居埃及的时候抬举他们,用大能的手领他们出来;}} || zhe4/zhei4 yi3 se4 lie4 min2 de5 shen2 jian3 xuan3 le5 wo3 men5 de5 zu3 zong1 , dang1/dang4 min2 ji4 ju1 ai1 ji2 de5 shi2 hou4 tai2 ju3 ta1 men5 , yong4 da4 neng2 de5 shou3 ling3 ta1 men5 chu1 lai2 ;||17 Der Gott dieses Volkes Israel erwählte unsere Väter und erhöhte das Volk in der Fremdlingschaft im Lande Ägypten, und mit erhobenem Arm führte er sie von dannen heraus; ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Apostelgeschichte]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |所以,我们同心定意,拣选几个人,差他们同我们所亲爱的巴拿巴和保罗往你们那里去。}} || suo3 yi3 , wo3 men5 tong2 xin1 ding4 yi4 , jian3 xuan3 ji1 ge4 ren2 , cha4/chai1 ta1 men5 tong2 wo3 men5 suo3 qin1 ai4 de5 ba1 na2 ba1 he2/he4/huo2 bao3 luo1 wang3/wang4 ni3 men5 na4/nei4 li3 qu4 。||25 deuchte es uns, einstimmig geworden, gut, Männer auszuerwählen und sie mit unseren Geliebten, Barnabas und Paulus, zu euch zu senden, ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Apostelgeschichte]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |不是显现给众人看,乃是显现给神预先所拣选为他作见证的人看,就是我们这些在他从死里复活以後和他同吃同喝的人。}} || bu4 shi4 xian3 xian4 gei3 zhong4 ren2 kan4 , nai3 shi4 xian3 xian4 gei3 shen2 yu4 xian1 suo3 jian3 xuan3 wei2/wei4 ta1 zuo4 jian4/xian4 zheng4 de5 ren2 kan4 , jiu4 shi4 wo3 men5 zhe4/zhei4 xie1 zai4 ta1 cong2 si3 li3 fu4 huo2 yi3 hou4 he2/he4/huo2 ta1 tong2 chi1 tong2 he1 de5 ren2 。||41 nicht dem ganzen Volke, sondern den von Gott zuvor erwählten Zeugen, uns, die wir mit ihm gegessen und getrunken haben, nachdem er aus den Toten auferstanden war. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Apostelgeschichte]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |惟有你们是被拣选的族类,是有君尊的祭司,是圣洁的国度,是属神的子民,要叫你们宣扬那召你们出黑暗入奇妙光明者的美德。}} || wei2 you3 ni3 men5 shi4 bei4 jian3 xuan3 de5 zu2 lei4 , shi4 you3 jun1 zun1 de5 ji4 si1 , shi4 sheng4 jie2 de5 guo2 du4 , shi4 shu3 shen2 de5 zi5 min2 , yao4 jiao4 ni3 men5 xuan1 扬 na4/nei4 zhao4 ni3 men5 chu1 hei1 an4 ru4 qi2 miao4 guang1 ming2 zhe3 de5 mei3 de2 。|| Ihr aber seid ein auserwähltes Geschlecht, ein königliches Priestertum, eine heilige Nation, ein Volk zum Besitztum, damit ihr die Tugenden dessen verkündigt, der euch berufen hat aus der Finsternis zu seinem wunderbaren Licht; ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Petrusbrief1]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |作长老的写信给蒙拣选的太太(或作:教会;下同),和他的儿女,就是我诚心所爱的;不但我爱,也是一切知道真理之人所爱的。}} || zuo4 chang2/zhang3 lao3 de5 xie3 xin4 gei3 meng2 jian3 xuan3 de5 tai4 tai4 ( huo4 zuo4 : jiao1 hui4 ; xia4 tong2 ), he2/he4/huo2 ta1 de5 er2/er5 nü3/ru3 , jiu4 shi4 wo3 cheng2 xin1 suo3 ai4 de5 ; bu4 dan4 wo3 ai4 , ye3 shi4 yi1 qie1 zhi1 dao4 zhen1 li3 zhi1 ren2 suo3 ai4 de5 。|| Der Älteste der auserwählten Frau und ihren Kindern, die ich liebe in der Wahrheit; und nicht ich allein, sondern auch alle, welche die Wahrheit erkannt haben, ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Johannesbrief2]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |被神所爱的弟兄阿,我知道你们是蒙拣选的;}} || bei4 shen2 suo3 ai4 de5 弟 xiong1 a1 , wo3 zhi1 dao4 ni3 men5 shi4 meng2 jian3 xuan3 de5 ;|| wissend, von Gott geliebte Brüder, eure Auserwählung. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Thesalonikerbrief2]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |他又说:我们祖宗的神拣选了你,叫你明白他的旨意,又得见那义者,听他口中所出的声音。}} || ta1 you4 shuo1 : wo3 men5 zu3 zong1 de5 shen2 jian3 xuan3 le5 ni3 , jiao4 ni3 ming2 bai2 ta1 de5 zhi3 yi4 , you4 de2/de5/dei3 jian4/xian4 na4/nei4 yi4 zhe3 , ting1 ta1 kou3 zhong1/zhong4 suo3 chu1 de5 sheng1 yin1 。||14 Er aber sprach: Der Gott unserer Väter hat dich zuvor verordnet, seinen Willen zu erkennen und den Gerechten zu sehen und eine Stimme aus seinem Munde zu hören. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Apostelgeschichte]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |主对亚拿尼亚说:你只管去!他是我所拣选的器皿,要在外邦人和君王,并以色列人面前宣扬我的名。}} || zhu3 dui4 ya4 na2 ni2 ya4 shuo1 : ni3 zhi3 guan3/guan5 qu4 ! ta1 shi4 wo3 suo3 jian3 xuan3 de5 qi4 min3 , yao4 zai4 wai4 bang1 ren2 he2/he4/huo2 jun1 wang2 , bing4 yi3 se4 lie4 ren2 mian4 qian2 xuan1 扬 wo3 de5 ming2 。||15 Der Herr aber sprach zu ihm: Gehe hin; denn dieser ist mir ein auserwähltes Gefäß, meinen Namen zu tragen sowohl vor Nationen als Könige und Söhne Israels. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Apostelgeschichte]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |主乃活石,固然是被人所弃的,却是被神所拣选、所宝贵的。}} || zhu3 nai3 huo2 shi2 , gu4 ran2 shi4 bei4 ren2 suo3 qi4 de5 , que4 shi4 bei4 shen2 suo3 jian3 xuan3 、 suo3 bao3 gui4 de5 。|| Zu welchem kommend, als zu einem lebendigen Stein, von Menschen zwar verworfen, bei Gott aber auserwählt, kostbar, ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Petrusbrief1]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |(双子还没有生下来,善恶还没有做出来,只因要显明神拣选人的旨意,不在乎人的行为,乃在乎召人的主。)}} || ( shuang1 zi5 hai2/huan2 mei2/mo4 you3 sheng1 xia4 lai2 , shan3/shan4 e4/wu4 hai2/huan2 mei2/mo4 you3 zuo4 chu1 lai2 , zhi3 yin1 yao4 xian3 ming2 shen2 jian3 xuan3 ren2 de5 zhi3 yi4 , bu4 zai4 乎 ren2 de5 hang2/xing2 wei2/wei4 , nai3 zai4 乎 zhao4 ren2 de5 zhu3 。)|| selbst als die Kinder noch nicht geboren waren und weder Gutes noch Böses getan hatten (auf daß der Vorsatz Gottes nach Auswahl bestände, nicht aus Werken, sondern aus dem Berufenden), ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Römerbrief]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |如今也是这样,照着拣选的恩典,还有所留的馀数。}} || ru2 jin1 ye3 shi4 zhe4/zhei4 yang4 , zhao4 zhao2/zhe2 jian3 xuan3 de5 en1 dian3 , hai2/huan2 you3 suo3 liu2 de5 yu2 shu3/shuo4 。|| Also ist nun auch in der jetzigen Zeit ein Überrest nach Wahl der Gnade. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Römerbrief]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |在巴比伦与你们同蒙拣选的教会问你们安。我儿子马可也问你们安。}} || zai4 ba1 bi4 lun2 yu3 ni3 men5 tong2 meng2 jian3 xuan3 de5 jiao1 hui4 wen4 ni3 men5 an1 。 wo3 er2/er5 zi5 ma3 ke3/ke4 ye3 wen4 ni3 men5 an1 。|| Es grüßt euch die Miterwählte in Babylon und Markus, mein Sohn. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Petrusbrief1]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |就着福音说,他们为你们的缘故是仇敌;就着拣选说,他们为列祖的缘故是蒙爱的。}} || jiu4 zhao2/zhe2 fu2 yin1 shuo1 , ta1 men5 wei2/wei4 ni3 men5 de5 yuan2 gu4 shi4 仇敌; jiu4 zhao2/zhe2 jian3 xuan3 shuo1 , ta1 men5 wei2/wei4 lie4 zu3 de5 yuan2 gu4 shi4 meng2 ai4 de5 。|| Hinsichtlich des Evangeliums sind sie zwar Feinde, um euretwillen, hinsichtlich der Auswahl aber Geliebte, um der Väter willen. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Römerbrief]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |那时,使徒和长老并全教会定意从他们中间拣选人,差他们和保罗、巴拿巴同往安提阿去;所拣选的就是称呼巴撒巴的犹大和西拉。这两个人在弟兄中是作首领的。}} || na4/nei4 shi2 , shi3/shi4 tu2 he2/he4/huo2 chang2/zhang3 lao3 bing4 quan2 jiao1 hui4 ding4 yi4 cong2 ta1 men5 zhong1/zhong4 jian1 jian3 xuan3 ren2 , cha4/chai1 ta1 men5 he2/he4/huo2 bao3 luo1 、 ba1 na2 ba1 tong2 wang3/wang4 an1 ti2 a1 qu4 ; suo3 jian3 xuan3 de5 jiu4 shi4 cheng1 hu1 ba1 sa1/sa3 ba1 de5 you2 da4 he2/he4/huo2 xi1 la1 。 zhe4/zhei4 liang3 ge4 ren2 zai4 弟 xiong1 zhong1/zhong4 shi4 zuo4 shou3 ling3 de5 。||22 Dann deuchte es den Aposteln und den Ältesten samt der ganzen Versammlung gut, Männer aus sich zu erwählen und sie mit Paulus und Barnabas nach Antiochien zu senden: Judas, genannt Barsabas, und Silas, Männer, welche Führer unter den Brüdern waren. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Apostelgeschichte]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |因为睡了的人是在夜间睡,醉了的人是在夜间醉。}} || yin1 wei2/wei4 shui4 le5 de5 ren2 shi4 zai4 ye4 jian1 shui4 , zui4 le5 de5 ren2 shi4 zai4 ye4 jian1 zui4 。|| Denn die da schlafen, schlafen des Nachts, und die da trunken sind, sind des Nachts trunken. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Thesalonikerbrief2]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |今朝有酒今朝醉}} || jin1 chao2/zhao1 you3 jiu3 jin1 chao2/zhao1 zui4 || ([[wikt:en:今朝有酒今朝醉|Wiktionary en]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |因为往日随从外邦人的心意行邪淫、恶欲、醉酒、荒宴、群饮,并可恶拜偶像的事,时候已经够了。}} || yin1 wei2/wei4 wang3/wang4 ri4 sui2 cong2 wai4 bang1 ren2 de5 xin1 yi4 hang2/xing2 xie2 yin2 、 e4/wu4 yu4 、 zui4 jiu3 、 huang1 yan4 、 qun2 yin3 , bing4 ke3/ke4 e4/wu4 bai4 偶 xiang4 de5 shi4 , shi2 hou4 yi3 jing4 gou4 le5 。|| Denn die vergangene Zeit ist uns genug, den Willen der Nationen vollbracht zu haben, indem wir wandelten in Ausschweifungen, Lüsten, Trunkenheit, Festgelagen, Trinkgelagen und frevelhaften Götzendienereien; ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Petrusbrief1]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |地上的君王与他行淫,住在地上的人喝醉了他淫乱的酒。}} || de4/di4 shang4 de5 jun1 wang2 yu3 ta1 hang2/xing2 yin2 , zhu4 zai4 de4/di4 shang4 de5 ren2 he1 zui4 le5 ta1 yin2 luan4 de5 jiu3 。|| mit welcher die Könige der Erde Hurerei getrieben haben; und die auf der Erde wohnen, sind trunken geworden von dem Weine ihrer Hurerei. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Offenbarung]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |因为吃的时候,各人先吃自己的饭,甚至这个饥饿,那个酒醉。}} || yin1 wei2/wei4 chi1 de5 shi2 hou4 , ge4 ren2 xian1 chi1 zi4 ji3 de5 fan4 , shen4 zhi4 zhe4/zhei4 ge4 ji1 e4 , na4/nei4 ge4 jiu3 zui4 。|| Denn ein jeder nimmt beim Essen sein eigenes Mahl vorweg, und der eine ist hungrig, der andere ist trunken. ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Korintherbrief1]])
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |你们想这些人是醉了;其实不是醉了,因为时候刚到巳初。}} || ni3 men5 xiang3 zhe4/zhei4 xie1 ren2 shi4 zui4 le5 ; qi2 shi2 bu4 shi4 zui4 le5 , yin1 wei2/wei4 shi2 hou4 gang1 dao4 si4 chu1 。||15 Denn diese sind nicht trunken, wie ihr meinet, denn es ist die dritte Stunde des Tages; ([[Diskussion:Vokabeltexte_Chinesisch/_Vokabellektionen#Das_Neue_Testament|Die Bibel - Apostelgeschichte]])
|}
== Lückentexte ==
=== [[:zh:Wikijunior:太阳系/木星|Wikijunior: 太阳系/木星 Sonnensystem/Jupiter]] ===
{| class="wikitable"
! [[:zh:Wikijunior:太阳系/木星|Wikijunior: 太阳系/木星 Sonnensystem/Jupiter]] !! Übersetzung Christian Bauer
|-
| 木星是太阳系里面最大的行星,|| Jupiter ist der größte Planet des Sonnensystems.
|-
| 在八大行星中,他是第五靠近太阳的。 || Unter den 8 großen Planeten, ist er der 5-nächste Planet der Sonne
|-
|
|-
| 木星有多大? || Wie groß ist der Jupiter?
|-
| 木星相当地大, ||Jupiter ist vergleichsweise groß.
|-
| 它的质量为是地球的318倍, || Seine Masse beträgt das 318-fache der Erde.
|-
| 大小是地球的1300倍, || Seine Größe ist das 1300-fache der Erde.
|-
| 赤道直径为142984公里, || Sein Äquatordurchmesser beträgt 142 984 km;
|-
| 是地球的11倍 。 || das ist 11-fache der Erde
|-
|
|-
| 木星有没有环? || Hat Jupiter Ringe?
|-
| 有! || Er hat!
|-
| 只是木星的环相当地不明显, || Seine Ringe sind vergleichsweise undurchsichtig
|-
| 很难看得见而已 || Sie sind sehr schwer zu erkennen.
|-
|
|-
| 木星的卫星是什么样子的? || Welcher Art sind die Monde des Jupiter?
|-
| 木星有许多的卫星, || Jupiter hat viele Monde.
|-
| 目前科学家所知道的就有79个, || Zur Zeit hat er 79 den Wissenschaftlern bekannte Monde.
|-
| 不过,木星上面有四个很大的卫星, || Aber unter den obengenannten Jupitermonden gibt es 4 sehr große.
|-
| 是由 Galilei 在1610年发现的, || Sie wurden durch Galilei im Jahre 1610 entdeckt.
|-
| 而这四个卫星,科学家称之为“Galileische 卫星”, || Und diese 4 Monde werden von den Wissenschaftlern Galileische Monde genannt.
|-
| 我们在下面会介绍: || Wir werden sie im Folgenden beschreiben:
|-
|
|-
| Galileische 卫星 || Galileische Monde
|-
| Galileische 卫星是木星的四个大型卫星, || Die Galileischen Monde sind Jupiters 4 große Monde.
|-
| 由 Galilei 于1610年1月7日首度发现。 || Sie wurden durch Galilei am 7. Januar 1610 zum ersten Mal entdeckt
|-
| 这四个卫星可以低功率望远镜来 beobachtet, || Diese 4 Monde können mit Niedrigleistungsteleskopen beobachtet werden
|-
| 如果没有光害, || wenn es keine Lichtverschmutzung gibt
|-
| 且环境极好, || und die Umstände äußerst gut sind.
|-
| 甚至可用肉眼勉强看到木卫四。 || Selbst mit bloßen Augen kann man, unter großen Anstrengungen, Jupitermond 4 (Callisto) sehen.
|-
| Galilei beobachtete 这四个卫星多日, || Galilei beobachtete diese 4 Monde viele Tage.
|-
| 发现虽然木星在空中移动, || Er entdeckte, dass obwohl Jupiter sich am Himmel bewegte,
|-
| 卫星仍环绕木星公转, || sich die Monde trotzdem um Jupiter drehten.
|-
| 从而得到支持哥白尼日心说的论据, || Daraus erhielt er Unterstützung für die Theorie der kopernikanischen heliozentrischen Lehre;
|-
| 即并非所有天体均 umkreisen die 地球。 || dass heißt, dass es nicht die Himmelskörper sind, die die Erde umkreisen
|-
|
|-
| 木卫一─IO(艾奥) || Jupitermond 1 - Io
|-
| 木卫一由 Galilei 和Marius于1610年发现, || Jupitermond 1 wurde durch Galileo und Marius im Jahr 1610 entdeckt.
|-
| 是距离木星最近的一颗卫星。 || Es ist der Mond mit der geringsten Entfernung von Jupiter.
|-
| 他有由 dünnem Schwefeldioxid 组成的大气, || Er hat eine aus dünnem Schwefeldioxid zusammengesetzte Atmosphäre
|-
| 表面主要由 glühend 热的 Silikat-岩石构成, || Seine Oberfläche wird hauptsächlich aus glühend heißem Silikatgestein gebildet.
|-
| 遍布环形山。 || die die Krater bedeckt.
|-
| 木卫一最为吸引人的地方就在于她表面遍布活火山, || Die Orte auf Jupitermond 1 mit der größten Anziehungskraft auf die Menschen, sind die seine Oberfläche bedeckenden aktiven Vulkane.
|-
| 她是除了地球太阳系中唯一一个存在活火山的天体。 || Er ist außer der Erde im Sonnensystem der einzige Himmelskörper auf dem aktive Vulkane existieren.
|-
| 旅行者号在 untersuchte 木卫一时, || Als die Voyager-Raumsonde Jupitermond 1 untersuchte,
|-
| 发现在木卫一表面有九个火山在同时 ausgebrochen sind, || entdeckte sie, dass es auf der Oberfläche von Jupitermond 1 neun Vulkane gab, die zur gleichen Zeit ausgebrochen sind.
|-
| 最高的 Ausbruch 高度高达上千公里。 || Die (Auswurf-)höhe des größten Ausbruchs erreichte 1000 km.
|-
|
|-
| 木卫二─EUROPA(欧罗巴) || Jupitermond 2 - Europa
|-
| 木卫二由 Galilei 和Marius于1610年发现。 || Jupitermond 2 (Europa) wurde durch Galilei und Marius im Jahr 1610 entdeckt.
|-
| 是木星的第六颗已知卫星, || Er war der sechts gefundene Mond Jupiters
|-
| 并是木星的第四大卫星, || und ist Jupiters viertgrößter Mond
|-
| 木卫二比地球的卫星月球稍微小一点, || Jupitermond 2 (Europa) ist im Vergleich zum Erdmond ein bißchen kleiner
|-
| 直径为3138千米。 || Sein Durchmesser beträgt 3138 km.
|-
| 木卫二表面主要由 Silikat-岩石构成, || Die Oberfläche von Jupitermond 2 (Europa) wird hauptsächlich aus Silikatgestein gebildet
|-
| 并且在外表还有一个冰-Hülle als Bedeckung。 || zusätzlich gibt es weiter außen noch Bedeckung durch eine Eishülle,
|-
| 木卫二最醒目的外观是遍布全球的一串串十字 Streifen。 || Die von Jupitermond 2 (Europa) am meisten ins Auge stechende Erscheinung ist seine vollständige Bedeckung mit aneinandergereihten, sich kreuzenden Streifen.
|-
| 较大的一个向外扩散到淡色物质地带, || Ein vergleichsweise großer verändert nach außen seine Farbe bis zu einer Zone mit hellem Material
|-
| 长近20千米。 || Seine Länge beträgt fast 20 km.
|-
| 最近的有关它们的起源理论是: || Die aktuellste Theorie über ihren Ursprung ist:
|-
| 它们由一连串火山-Ausbruch 出物或 Geysire 产生。 || Sie sind durch einen wiederholten Vulkanausbruch oder Geysire entstanden.
|-
| 木卫二也许是科学家最为关注的木星卫星之一, || Jupitermond 2 (Europa) ist vermutlicher einer der Jupitermonde, der die meiste Aufmerksamkeit der Wissenschaftlern auf sich gezogen hat.
|-
| “Galileo”号 Sonde 两次接近木卫二时 photographisch aufgenommen 的资料显示木卫二上有冰山以及海洋的存在, || Als sich die Sonde Galileo ihm zum zweiten Mal näherte zeigte das von ihr aufgenommene photographische Material, dass es auf Jupitermond 2 (Europa) Eisberge und auch ein Ozean existieren.
|-
| 且含有大量的 flüssigem 水。 || und er enthält große Mengen an flüssigem Wasser.
|-
| 因此一些科学家 vermuten 是否会有生命存在。 || Daher vermuten einige Wissenschaftler, ob dort vielleicht Leben existieren kann.
|-
| 木卫二表面以下发现 flüssige 水 可能孕育生命 || Das unter der Oberfläche von Jupitermond 2 (Europa) entdeckte flüssige Wasser könnte vielleicht Leben hervorgebracht haben.
|-
|
|-
| 在木星上一天有多长? || Wie lange ist ein Tag auf Jupiter?
|-
| 木星的自转速度相当地快, || Jupiters Rotationsgeschwindigkeit ist vergleichsweise schnell.
|-
| 在木星上,一天只有大约10个小时, || Auf Jupiter dauert ein Tag nur ungefähr 10 Stunden.
|-
| 因为它的自转周期大约为10个小时 || weil seine Rotationsperiode ungefähr 10 Stunden ist.
|-
|
|-
| 木星是由什么构成的? || Aus was ist Jupiter zusammengesetzt?
|-
| 木星是由气体(Wasserstoff 75%,Helium 24%,其他1%)构成的, || Jupiter besteht aus Gas (Wasserstoff 75%, Helium 24%, anderes 1%).
|-
| 因此如果你想登陆木星, || Wenn du also auf Jupiter landen möchtest,
|-
| 你将会发现你不能“登陆”, || wirst du entdecken, dass du nicht "landen" kannst,
|-
| 因为它是由气体构成的! || weil er nur aus Gas besteht.
|-
|
|-
| 如果我站在上面会有多重? || Wenn ich auf seiner Oberfläche stünde, wie schwer wäre ich?
|-
| 木星的重力场约为地球的2.34倍, || Jupiters Gravitationsfeld ist ungefähr das 2.34-fache der Erde.
|-
| 如果我们将地球表面的重力场叫1G, || Wenn wir das Gravitationsfeld auf der Erdoberfläche 1G nennen,
|-
| 那么,木星表面的重力场就大概有2.34G, || dann ist das Gravitationsfeld auf der Jupiteroberfläche ungefähr 2,34 G,
|-
| 意思就是说, || Die Bedeutung ist in anderen Worten:
|-
| 如果你的体重在地球上是60公斤的话, || Wenn dein Körpergewicht auf der Erde 60 kg beträgt,
|-
| 在木星上用地球体重计你的体重就大概是140.4公斤! || beträgt es auf dem Jupiter, wenn du eine Erdwaage benützen würdest, ungefähr 140,4 kg.
|-
|
|-
| 木星为什么叫这个名字? || Warum hat Jupiter diesen Namen?
|-
| 西方名称 || Westlicher Name
|-
| 木星的英文名字叫做朱庇特(Jupiter), || Jupiters englischer Name ist "Zhu bi te" (Jupiter)
|-
| 这个名字是起源于罗马神话中的众神之王。 || Dieser Name hat seinen Ursprung in der römischen Mythologie; er ist der König aller Götter.
|}
=== [http://magazine.marcopoloproject.org/%e4%b8%ad%e5%9b%bd%e7%a4%be%e4%bc%9a%e7%9a%84%e4%b8%a4%e5%a4%a7%e5%ba%95%e8%89%b2-main-backgrounds-chinese-society/ the marco polo project: 中国社会的两大底色] ===
记得我小时候(七十年代中期,我五六岁),一次与邻家的小姑娘到第四人民医院门前的小河边去玩,河边另有几个 spielen 的孩子。忽然,一幕令人 schockieren 的情景发生了,我们看见一个很小的孩子被一个稍大一点的孩子推入水中。Zeuge 这一场景,我惊呆了。我看见水面上不时露出伸出水面的那孩子的手脚。与我一起的那个小姑娘则似乎显得十分冷静,提醒我赶快走开,因为我们很可能被人 fälschlich beschuldigt, dass 我们将那个孩子推下去的。这令我更加无所适从。幸好有人赶来救起了那孩子。直到今天,那孩子被救起时惨白的脸与直直张开的五指令人记忆犹新。今天回忆这件往事,我忽然意识到,我们这一代人成长起来的那个社会 Hintergrund 的底色——人与人之间的极度的不信任。
在一些城市的公园里,通常有着一种 Heirats-“市场”,一些为人父母的老年人以及一些婚介行业的从业人员是这里的常客。为人父母的老年人们手握着自己子女所拥有的物质条件与社会地位的“价码”,就像猎人一般 versuchen 出得起相应价码的 potentiell 的媳妇或者 Schwiegersohn。在他们眼中,价码是唯一的。因为他们认为如果想让自己的子女获得幸福的话,就必须用自己拥有的物质价码去换取一个更好的物质价码。在他们的 Unterbewußtsein 里,Heirat 是改变整个家庭的命运的 Weg。难怪有外国人抱怨,娶中国人为妻就等于娶了她全家。不过吊诡的是,那些为人父母的老年人们如果手握的子女的价码很高的话(比如所谓高学历、高收入、高职位),则他们猎取到他们的“猎物”的几率反而很小。为什么呢?因为他们希望用他们手中的较高价码换取更高的价码,而真正拥有更高价码的人是根本不需要到这种 Heirats-市场上来求偶的,他们不 Mangel 交配与结婚的机会。而在这 Heirats-“市场”达成了交易的人们又怎么样呢?没有更多的在 Heirats-“市场”达成交易者的幸福指数的调查记录,故不好下一个断然的结论。不过可以想见,那些试图通过 Heirat 来 die sozial Leiter hochzusteigen、改变命运的人的期望通常是要落空的。因为建立在利益 Basis 上的 Heirat verbirgt 天然的“Läsionen”。因利而合,必因利而破。
来到这充斥着油-Geruch 的物质条件交易的 Heirats-“市场”,我们会感受到中国社会的另一基本底色———人人都急于在物质与社会地位上改变命运。
底色决定着现实。在现实中的人是认不清现实的。只有跳出这个现实,去到另一种现实的可能性中,才能认清我们所处的现实的本质。
在人与人的信任度较高、相对成熟的社会中,我们可以看到其中有一个可循的规律————那个社会保有着基本价值观持续性,而人群所属社会阶层也具有相当的 Stabilität。Stabil 的基本价值观保证着那个社会的成员之间的基本认同感与信任感。人如果在自己所属的阶层与行业都可以实现自己的价值,人就不需要急于跳出自己所属的被认为低贱的阶层与行业而 suchen 改变命运。在这样的社会中,人不会因助人而 werden verachtet;在这样的社会中,人可以更 einfach 去爱和建立家庭。
...
[http://magazine.marcopoloproject.org/authors/Li%20Yehang%20-%20%E6%9D%8E%E9%87%8E%E8%88%AA/ Li Yehang]
[http://magazine.marcopoloproject.org/%e4%b8%ad%e5%9b%bd%e7%a4%be%e4%bc%9a%e7%9a%84%e4%b8%a4%e5%a4%a7%e5%ba%95%e8%89%b2-the-two-main-backgrounds-in-chinese-society-english/ Übersetzung]
The two main backgrounds in Chinese society
I remember when I was a kid (in the middle of the 70s, I was five or six years old) , I once went to play by the little river next to the 4th People’s hospital with the neighbours’ little girl. There were many other children playing by the river. Suddenly, something shocking occurred: we a saw small child pushed into the river by a bigger child. As I witnessed the scene, I was stunned. I saw the hands and feet of that child come in and out of the water. But the little girl with me seemed very calm, and told me that we should quickly run off, because we could be framed as those who pushed that kid into the water. This confused me even more. Fortunately, someone came by and rescued the boy. To this day, the pale face and open fingers of that child as he was rescued remain very fresh in my memory. As I was remembering the past today, I suddenly realized that our generation grew up against that particular social background – one of extreme distrust among people.
In some Chinese city parks, you can find a sort of ‘marriage market’, regularly visited by elderly parents and professional match-makers. Parents hand out their sons and daughters with a ‘price tag’ specifying economic conditions and social status, and like hunters, look out for a potential daughter- or son-in law with a corresponding price-tage. In their eyes, the price-tag is all there is. Because they think that, if they want to make their child happy, they have to somehow exchange their own price tag for one of higher value. Subconsciously, they view marriage as a way to change the fate of the whole family. No wonder foreigners complain that marrying a Chinese person is like marrying their whole family. But the paradox is that, if the price tag in the hands of these elderly parents is high (with requests of ‘high education level’, ‘high income’, ‘high position’), the probability of them catching the ‘prey’ is very small. Why is that? Because they hope to get a higher price tag by holding a high tag price in their hands, but the people who really have such a higher price tag don’t need to go to such ‘marriage markets’, they have no shortage of opportunities for matching and marriage. But what happens to people who have made a transaction in this marriage ‘market’? There is no happiness survey records for people trading in the marriage ‘market’, and so we can’t categorically say that the result is bad. But we can imagine, the expectations of people who hope to climb up the social ladder and change their fate through marriage are generally crushed. Because a marriage established on the basis of interest hides natural ‘lesions’. And what was united by interest will be broken by interest.
From this marriage ‘market’ filled with the oily smell of material conditions, we can perceive another fundamental element of Chinese society — that everyone is eager to change their destiny at the material level and in terms of social status.
Background determines reality. People who are immersed in ‘reality’ cannot interpret that reality. Only by escaping this reality for the possibilities of another can we recognize what it is in essence.
We can see that a relatively mature society with high levels of interpersonal trust follows a particular rule — that society consistently protects some fundamental values, and that the social classes that the people belong to also have considerable stability. The protection of stable fundamental values guarantees the sense of identity and interpersonal trust among the members of this society. If people can experience their own real value in their own position and career, people don’t need to eagerly jump out of a position or career that others consider inferior, and seek to change their own fate this way. In such a society, people will not be blamed for helping others; in such a society, people can purely love and start a family.
...
[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/acts-of-the-apostles/6/ Apostelgeschichte Kapitel 6] ====
{| class="wikitable"
! Chinese Union Version !! Übersetzung Rudolf Brockhaus (1856-1932)
|-
| 那时,门徒增多,有说希利尼话的犹太人向希伯来人发怨言,因为在天天的供给上忽略了他们的寡妇。||1 In diesen Tagen aber, als die Jünger sich vermehrten, entstand ein Murren der Hellenisten gegen die Hebräer, weil ihre Witwen bei der täglichen Bedienung übersehen wurden.
|-
| 十二使徒叫众门徒来,对他们说:我们 verlassen 神的道去管理饭食,原是不合宜的。||2 Die Zwölfe aber beriefen die Menge der Jünger und sprachen: Es ist nicht gut, daß wir das Wort Gottes verlassen und die Tische bedienen.
|-
| 所以弟兄们,当从你们中间选出七个有好名声、被圣灵充满、智慧充足的人,我们就派他们管理这事。||3 So sehet euch nun um, Brüder, nach sieben Männern aus euch, von gutem Zeugnis, voll Heiligen Geistes und Weisheit, die wir über dieses Geschäft bestellen wollen;
|-
| 但我们要专心以 Gebet、传道为事。||4 wir aber werden im Gebet und im Dienst des Wortes verharren.
|-
| 大众都喜悦这话,就拣选了司提反,乃是大有信心、圣灵充满的人,又拣选 Philippus、伯罗哥罗、Nikanor、提门、巴米拿,并进犹太教的安提阿人尼哥拉,||5 Und die Rede gefiel der ganzen Menge; und sie erwählten Stephanus, einen Mann voll Glaubens und Heiligen Geistes, und Philippus und Prochorus und Nikanor und Timon und Parmenas und Nikolaus, einen Proselyten aus Antiochien,
|-
| 叫他们站在使徒面前。使徒 gebetet-了,就按手在他们头上。||6 welche sie vor die Apostel stellten; und als sie gebetet hatten, legten sie ihnen die Hände auf.
|-
| 神的道 wuchs;在耶路撒冷门徒数目加增的甚多,也有许多祭司信从了这道。||7 Und das Wort Gottes wuchs, und die Zahl der Jünger in Jerusalem vermehrte sich sehr; und eine große Menge der Priester wurde dem Glauben gehorsam.
|-
| 司提反满得 Gnade、能力,在民间行了大奇事和神迹。||8 Stephanus aber, voll Gnade und Kraft, tat Wunder und große Zeichen unter dem Volke.
|-
| 当时有称利百地拿会堂的几个人,并有古利奈、亚力山太、基利家、亚西亚、各处会堂的几个人,都起来和司提反辩论。||9 Es standen aber etliche auf von der sogenannten Synagoge der Libertiner und der Kyrenäer und der Alexandriner und derer von Cilicien und Asien und stritten mit Stephanus.
|-
| 司提反是以智慧和圣灵说话,众人敌挡不住,||10 Und sie vermochten nicht der Weisheit und dem Geiste zu widerstehen, womit er redete.
|-
| 就买出人来说:我们听见他说 Lästerworte?摩西和神的话。||11 Da schoben sie heimlich Männer vor, welche sagten: Wir haben ihn Lästerworte reden hören wider Moses und Gott.
|-
| 他们又 erregten 百姓、长老,并文士,就忽然来 ergriffen 他,把他带到公会去,||12 Und sie erregten das Volk und die Ältesten und die Schriftgelehrten; und sie fielen über ihn her und rissen ihn mit sich fort und führten ihn vor das Synedrium.
|-
| 设下假见证,说:这个人说话,不住的糟践圣所和律法。||13 Und sie stellten falsche Zeugen auf, welche sagten: Dieser Mensch hört nicht auf, Worte zu reden wider die heilige Stätte und das Gesetz;
|-
| 我们曾听见他说:这拿撒勒人 Jesus 要 zerstören 此地,也要改变摩西所交给我们的规条。||14 denn wir haben ihn sagen hören: Dieser Jesus, der Nazaräer, wird diese Stätte zerstören und die Gebräuche verändern, die uns Moses überliefert hat.
|-
| 在公会里坐着的人都定睛看他,见他的面貌,好像天使的面貌。||15 Und alle, die in dem Synedrium saßen, schauten unverwandt auf ihn und sahen sein Angesicht wie eines Engels Angesicht.
|}
==== [https://newchristianbiblestudy.org/de/bible/compare/chinese-union-s/german-elberfelder-1905/acts-of-the-apostles/9/ Apostelgeschichte Kapitel 9] ====
{| class="wikitable"
! Chinese Union Version !! Übersetzung Rudolf Brockhaus (1856-1932)
|-
| 扫罗仍然向主的门徒口吐 Drohung 凶杀的话,去见大祭司,||1 Saulus aber, noch Drohung und Mord wider die Jünger des Herrn schnaubend, ging zu dem Hohenpriester
|-
| 求文书给大马色的各会堂,若是找着信奉这道的人,无论男女,都准他 gebunden 带到耶路撒冷。||2 und erbat sich von ihm Briefe nach Damaskus an die Synagogen, damit, wenn er etliche, die des Weges wären, fände, sowohl Männer als Weiber, er sie gebunden nach Jerusalem führe.
|-
| 扫罗行路,将到大马色,忽然从天上发光,四面照着他;||3 Als er aber hinzog, geschah es, daß er Damaskus nahte. Und plötzlich umstrahlte ihn ein Licht aus dem Himmel;
|-
| 他就仆倒在地,听见有声音对他说:扫罗!扫罗!你为什么 verfolgst 我?||4 und auf die Erde fallend, hörte er eine Stimme, die zu ihm sprach: Saul, Saul, was verfolgst du mich?
|-
| 他说:主阿!你是谁?主说:我就是你所 verfolgen 的 Jesus。||5 Er aber sprach: Wer bist du, Herr? Er aber sprach: Ich bin Jesus, den du verfolgst.
|-
| 起来!进城去,你所当做的事,必有人告诉你。||6 Stehe aber auf und geh in die Stadt, und es wird dir gesagt werden, was du tun sollst.
|-
| 同行的人站在那里,说不出话来,听见声音,却看不见人。||7 Die Männer aber, die mit ihm des Weges zogen, standen sprachlos, da sie wohl die Stimme hörten, aber niemand sahen.
|-
| 扫罗从地上起来. Seine 眼睛 waren aufgetan, aber 不能看见什么。有人拉他的手,领他进了大马色;||8 Saulus aber richtete sich von der Erde auf. Als aber seine Augen aufgetan waren, sah er niemand. Und sie leiteten ihn bei der Hand und führten ihn nach Damaskus.
|-
| 三日不能看见,也不吃也不喝。||9 Und er war drei Tage nicht sehend und aß nicht und trank nicht.
|-
| 当下,在大马色有一个门徒,名叫亚拿尼亚。主在异象中对他说:亚拿尼亚。他说:主,我在这里。||10 Es war aber ein gewisser Jünger in Damaskus, mit Namen Ananias; und der Herr sprach zu ihm in einem Gesicht: Ananias! Er aber sprach: Siehe, hier bin ich, Herr!
|-
| 主对他说:起来!往直街去,在犹大的家里,frage nach 一个大数人,名叫扫罗。他正 betet,||11 Der Herr aber sprach zu ihm: Stehe auf und geh in die Straße, welche die gerade genannt wird, und frage im Hause des Judas nach einem, mit Namen Saulus, von Tarsus, denn siehe, er betet;
|-
| 又看见了一个人,名叫亚拿尼亚,进来按手在他身上,叫他能看见。||12 und er hat im Gesicht einen Mann, mit Namen Ananias, gesehen, der hereinkam und ihm die Hände auflegte, damit er wieder sehend werde.
|-
| 亚拿尼亚回答说:主阿,我听见许多人说:这人怎样在耶路撒冷多多苦害你的圣徒,||13 Ananias aber antwortete: Herr, ich habe von vielen von diesem Manne gehört, wie viel Böses er deinen Heiligen in Jerusalem getan hat.
|-
| 并且他在这里有从祭司长得来的 Gewalt, zu binden 一切求告你名的人。||14 Und hier hat er Gewalt von den Hohenpriestern, alle zu binden, die deinen Namen anrufen.
|-
| 主对亚拿尼亚说:你只管去!他是我所拣选的器皿,要在外邦人和君王,并以色列人面前宣扬我的名。||15 Der Herr aber sprach zu ihm: Gehe hin; denn dieser ist mir ein auserwähltes Gefäß, meinen Namen zu tragen sowohl vor Nationen als Könige und Söhne Israels.
|-
| 我也要指示他,为我的名必须受许多的苦难。||16 Denn ich werde ihm zeigen, wie vieles er für meinen Namen leiden muß.
|-
| 亚拿尼亚就去了,进入那家,把手按在扫罗身上,说:兄弟扫罗,在你来的路上向你显现的主,就是 Jesus,打发我来,叫你能看见,又被圣灵充满。||17 Ananias aber ging hin und kam in das Haus; und ihm die Hände auflegend, sprach er: Bruder Saul, der Herr hat mich gesandt, Jesus, der dir erschienen ist auf dem Wege, den du kamst, damit du wieder sehend und mit Heiligem Geiste erfüllt werdest.
|-
| 扫罗的眼睛上,好像有 Schuppen 立刻掉下来,他就能看见。於是起来受了洗;||18 Und alsbald fiel es wie Schuppen von seinen Augen, und er wurde sehend und stand auf und wurde getauft.
|-
| 吃过饭就健壮了。扫罗和大马色的门徒同住了些日子,||19 Und nachdem er Speise genommen hatte, wurde er gestärkt. Er war aber etliche Tage bei den Jüngern, die in Damaskus waren.
|-
| 就在各会堂里宣传 Jesum,说他是神的儿子。||20 Und alsbald predigte er in den Synagogen Jesum, daß dieser der Sohn Gottes ist.
|-
| 凡听见的人都惊奇,说:在耶路撒冷残害求告这名的,不是这人么?并且他到这里来,特要 binden 他们,带到祭司长那里。||21 Alle aber, die es hörten, gerieten außer sich und sagten: Ist dieser nicht der, welcher in Jerusalem die zerstörte, welche diesen Namen anrufen, und dazu hierhergekommen war, auf daß er sie gebunden zu den Hohenpriestern führe?
|-
| 但扫罗越发有能力,驳倒住大马色的犹太人,证明 Jesus 是基督。||22 Saulus aber erstarkte um so mehr und brachte die Juden, die in Damaskus wohnten, in Verwirrung, indem er bewies, daß dieser der Christus ist.
|-
| 过了好些日子,犹太人商议要杀扫罗,||23 Als aber viele Tage verflossen waren, ratschlagten die Juden miteinander, ihn umzubringen.
|-
| 但他们的计谋被扫罗知道了。他们又昼夜在城门守候,要杀他。||24 Es wurde aber dem Saulus ihr Anschlag bekannt. Und sie bewachten auch die Tore sowohl bei Tage als bei Nacht, damit sie ihn umbrächten.
|-
| 他的门徒就在夜间用 Korb 把他从城墙上 herabließen。||25 Die Jünger aber nahmen ihn bei der Nacht und ließen ihn durch die Mauer hinab, indem sie ihn in einem Korbe hinunterließen.
|-
| 扫罗到了耶路撒冷,想与门徒结交,他们却都怕他,不信他是门徒。||26 Als er aber nach Jerusalem gekommen war, versuchte er, sich den Jüngern anzuschließen; und alle fürchteten sich vor ihm, da sie nicht glaubten, daß er ein Jünger sei.
|-
| 惟有巴拿巴接待他,领去见使徒,把他在路上怎么看见主,主怎么向他说话,他在大马色怎么奉 Jesu 的名放胆传道,都述说出来。||27 Barnabas aber nahm ihn und brachte ihn zu den Aposteln und erzählte ihnen, wie er auf dem Wege den Herrn gesehen habe, und daß derselbe zu ihm geredet, und wie er in Damaskus freimütig im Namen Jesu gesprochen habe.
|-
| 於是扫罗在耶路撒冷和门徒出入来往,||28 Und er ging mit ihnen aus und ein in Jerusalem und sprach freimütig im Namen des Herrn.
|-
| 奉主的名放胆传道,并与说希利尼话的犹太人讲论辩驳;他们却想法子要杀他。||29 Und er redete und stritt mit den Hellenisten; sie aber trachteten, ihn umzubringen.
|-
| 弟兄们知道了就送他下该撒利亚,打发他往大数去。||30 Als die Brüder es aber erfuhren, brachten sie ihn nach Cäsarea hinab und sandten ihn hinweg nach Tarsus.
|-
| 那时,犹太加利利、Samaria 各处的教会都得平安,被建立;凡事敬畏主,蒙圣灵的 Trost,人数就增多了。||31 So hatten denn die Versammlungen durch ganz Judäa und Galiläa und Samaria hin Frieden und wurden erbaut und wandelten in der Furcht des Herrn und wurden vermehrt durch den Trost des Heiligen Geistes.
|-
| 彼得周流四方的时候,也到了居住吕大的圣徒那里;||32 Es geschah aber, daß Petrus, indem er allenthalben hindurchzog, auch zu den Heiligen hinabkam, die zu Lydda wohnten.
|-
| 遇见一个人,名叫以尼雅,得了 Lähmung,在褥子上躺卧八年。||33 Er fand aber daselbst einen gewissen Menschen, mit Namen Äneas, der seit acht Jahren zu Bett lag, welcher gelähmt war.
|-
| 彼得对他说:以尼雅, Jesus 基督医好你了;起来!收拾你的褥子。他就立刻起来了。||34 Und Petrus sprach zu ihm: Äneas! Jesus, der Christus, heilt dich; stehe auf und bette dir selbst! Und alsbald stand er auf.
|-
| 凡住吕大和沙仑的人都看见了他,就归服主。||35 Und es sahen ihn alle, die zu Lydda und Saron wohnten, welche sich zum Herrn bekehrten.
|-
| 在约帕有一个女徒,名叫大比大,?希利尼话就是多加(就是 Antilope 的意思);他广行善事,多施周济。||36 In Joppe aber war eine gewisse Jüngerin, mit Namen Tabitha, was verdolmetscht heißt: Dorkas; diese war voll guter Werke und Almosen, die sie übte.
|-
| 当时,他患病而死,有人把他洗了,停在楼上。||37 Es geschah aber in jenen Tagen, daß sie krank wurde und starb. Und als sie sie gewaschen hatten, legten sie sie auf den Obersaal.
|-
| 吕大原与约帕相近;门徒听见彼得在那里,就打发两个人去见他,央求他说:快到我们那里去,不要 zögern。||38 Da aber Lydda nahe bei Joppe war, sandten die Jünger, als sie gehört hatten, daß Petrus daselbst sei, zwei Männer zu ihm und baten: Zögere nicht, zu uns zu kommen.
|-
| 彼得就起身和他们同去;到了,便有人领他上楼。众寡妇都站在彼得旁边哭,拿多加与他们同在时所做的里衣外衣给他看。||39 Petrus aber stand auf und ging mit ihnen; und als er angekommen war, führten sie ihn auf den Obersaal. Und alle Witwen traten weinend zu ihm und zeigten ihm die Leibröcke und Kleider, welche die Dorkas gemacht hatte, während sie bei ihnen war.
|-
| 彼得叫他们都出去,就 kniete nieder und betete,转身对着死人说:大比大,起来!他就 schlug ihre 眼睛 auf,见了彼得,便坐起来。||40 Petrus aber trieb alle hinaus, kniete nieder und betete. Und er wandte sich zu dem Leichnam und sprach: Tabitha, stehe auf! Sie aber schlug ihre Augen auf, und als sie den Petrus sah, setzte sie sich auf.
|-
| 彼得伸手 richtete 他 auf,叫众圣徒和寡妇进去,把多加活活的交给他们。||41 Er aber gab ihr die Hand und richtete sie auf; er rief aber die Heiligen und die Witwen und stellte sie lebend dar.
|-
| 这事传遍了约帕,就有许多人信了主。||42 Es wurde aber durch ganz Joppe hin kund, und viele glaubten an den Herrn.
|-
| 此後,彼得在约帕一个硝皮匠西门的家里住了多日。||43 Es geschah aber, daß er viele Tage in Joppe blieb, bei einem gewissen Simon, einem Gerber.
|}
==== [https://newchristianbiblestudy.org/de/bible/compare/chinese-union-s/german-elberfelder-1905/matthew/15/ Matthäusevangelium Kapitel 15] ====
{| class="wikitable"
! Chinese Union Version !! Übersetzung Rudolf Brockhaus (1856-1932)
|-
| 15.1 那时,有法利赛人和文士从耶路撒冷来见Jesus ,说: || 15.1 Dann kommen die Schriftgelehrten und Pharisäer von Jerusalem zu Jesu und sagen:
|-
| 15.2 你的门徒为什么 übertreten 古人的遗传呢?因为吃饭的时候,他们不洗手。 || 15.2 Warum übertreten deine Jünger die Überlieferung der Ältesten? Denn sie waschen ihre Hände nicht, wenn sie Brot essen.
|-
| 15.3 Jesus 回答说:你们为什么因着你们的遗传 übertretet 神的 Gebot 呢? || 15.3 Er aber antwortete und sprach zu ihnen: Warum übertretet auch ihr das Gebot Gottes um eurer Überlieferung willen?
|-
| 15.4 神说:当孝敬父母;又说:Verfluchen 父母的,必治死他。 || 15.4 Denn Gott hat geboten und gesagt: "Ehre den Vater und die Mutter!" und: "Wer Vater oder Mutter flucht, soll des Todes sterben."
|-
| 15.5 你们倒说:无论何人对父母说:我所当奉给你的已经作了 Gabe,他就可以不孝敬父母。 || 15.5 Ihr aber saget: Wer irgend zu dem Vater oder zu der Mutter spricht: Eine Gabe sei das, was irgend dir von mir zunutze kommen könnte; und er wird keineswegs seinen Vater oder seine Mutter ehren;
|-
| 15.6 这就是你们 um eurer 遗传 Willen,废了神的 Gebot。 || 15.6 und ihr habt so das Gebot Gottes ungültig gemacht um eurer Überlieferung willen.
|-
| 15.7 假冒为善的人哪,以赛亚指着你们说的预言是不错的。他说: || 15.7 Heuchler! Trefflich hat Jesaias über euch geweissagt, indem er spricht:
|-
| 15.8 这百姓用 Lippen 尊敬我,心却远离我; || 15.8 "Dieses Volk ehrt mich mit den Lippen, aber ihr Herz ist weit entfernt von mir.
|-
| 15.9 他们将人的 Gebote 当作道理教导人,所以拜我也是枉然。 || 15.9 Vergeblich aber verehren sie mich, indem sie als Lehren Menschengebote lehren."
|-
| 15.10 Jesus 就叫了众人来,对他们说:你们要听,也要明白。 || 15.10 Und er rief die Volksmenge herzu und sprach zu ihnen: Höret und verstehet!
|-
| 15.11 入口的不能污秽人,出口的乃能污秽人。 || 15.11 Nicht was in den Mund eingeht, verunreinigt den Menschen, sondern was aus dem Munde ausgeht, das verunreinigt den Menschen.
|-
| 15.12 当时,门徒进前来对他说:法利赛人听见这话,不服,你知道么? || 15.12 Dann traten seine Jünger herzu und sprachen zu ihm: Weißt du, daß die Pharisäer sich ärgerten, als sie das Wort hörten?
|-
| 15.13 Jesus 回答说:凡 Pflanze,若不是我天父 gepflanzt 的,必要拔出来。 || 15.13 Er aber antwortete und sprach: Jede Pflanze, die mein himmlischer Vater nicht gepflanzt hat, wird ausgerottet werden.
|-
| 15.14 Laßt 他们罢!他们是 Blinder 领路的;若是 Blinder 领 Blinden,两个人都要掉在 Grube 里。 || 15.14 Laßt sie; sie sind blinde Leiter der Blinden. Wenn aber ein Blinder einen Blinden leitet, so werden beide in eine Grube fallen.
|-
| 15.15 彼得对Jesus 说:请将这比喻讲给我们听。 || 15.15 Petrus aber antwortete und sprach zu ihm: Deute uns dieses Gleichnis.
|-
| 15.16 Jesus 说:你们到如今还不明白么? || 15.16 Er aber sprach: Seid auch ihr noch unverständig?
|-
| 15.17 岂不知凡入口的,是运到肚子里,又落在 Abort 里么? || 15.17 Begreifet ihr noch nicht, daß alles, was in den Mund eingeht, in den Bauch geht und in den Abort ausgeworfen wird?
|-
| 15.18 惟独出口的,是从心里发出来的,这才污秽人。 || 15.18 Was aber aus dem Munde ausgeht, kommt aus dem Herzen hervor, und das verunreinigt den Menschen.
|-
| 15.19 因为从心里发出来的,有恶念、凶杀、Ehebruch、苟合、偷盗、妄证、Lästerungen。 || 15.19 Denn aus dem Herzen kommen hervor böse Gedanken, Mord, Ehebruch, Hurerei, Dieberei, falsche Zeugnisse, Lästerungen;
|-
| 15.20 这都是污秽人的;至於不洗手吃饭,那却不污秽人。 || 15.20 diese Dinge sind es, die den Menschen verunreinigen, aber mit ungewaschenen Händen essen verunreinigt den Menschen nicht.
|-
| 15.21 Jesus 离开那里,退到推罗、西顿的境内去。 || 15.21 Und Jesus ging aus von dannen und entwich in die Gegenden von Tyrus und Sidon;
|-
| 15.22 有一个迦南妇人,从那地方出来,schrie zu ihm und 说:主阿,大卫的子孙,可怜我!我女儿被鬼附得甚苦。 || 15.22 und siehe, ein kananäisches Weib, das von jenen Grenzen herkam, schrie zu ihm und sprach: Erbarme dich meiner, Herr, Sohn Davids! Meine Tochter ist schlimm besessen.
|-
| 15.23 Jesus 却一言不答。门徒进前来,求他说:这妇人在我们後头 schreit,请打发他走罢。 || 15.23 Er aber antwortete ihr nicht ein Wort. Und seine Jünger traten herzu und baten ihn und sprachen: Entlaß sie, denn sie schreit hinter uns her.
|-
| 15.24 Jesus 说:我 bin nicht gesandt 不过是到以色列家迷失的羊那里去。 || 15.24 Er aber antwortete und sprach: Ich bin nicht gesandt, als nur zu den verlorenen Schafen des Hauses Israel.
|-
| 15.25 那妇人来拜他,说:主阿,帮助我! || 15.25 Sie aber kam und warf sich vor ihm nieder und sprach: Herr, hilf mir!
|-
| 15.26 他回答说:不好拿儿女的 Brot 丢给狗吃。 || 15.26 Er aber antwortete und sprach: Es ist nicht schön, das Brot der Kinder zu nehmen und den Hündlein hinzuwerfen.
|-
| 15.27 妇人说:主阿,不错;但是狗也吃他主人桌子上掉下来的 Brosamen。 || 15.27 Sie aber sprach: Ja, Herr; denn es essen ja auch die Hündlein von den Brosamen, die von dem Tische ihrer Herren fallen.
|-
| 15.28 Jesus 说:妇人,你的信心是大的!照你所要的,给你成全了罢。从那时候,他女儿就好了。 || 15.28 Da antwortete Jesus und sprach zu ihr: O Weib, dein Glaube ist groß; dir geschehe, wie du willst. Und ihre Tochter war geheilt von jener Stunde an.
|-
| 15.29 Jesus 离开那地方,来到靠近加利利的海边,就上山坐下。 || 15.29 Und Jesus ging von dannen hinweg und kam an den See von Galiläa; und als er auf den Berg gestiegen war, setzte er sich daselbst.
|-
| 15.30 有许多人到他那里,带着 Lahme、Blinde、哑吧、有残疾的,和好些别的病人,都放在他脚前;他就治好了他们。 || 15.30 Und große Volksmengen kamen zu ihm, welche Lahme, Blinde, Stumme, Krüppel und viele andere bei sich hatten, und sie warfen sie ihm zu Füßen; und er heilte sie,
|-
| 15.31 甚至众人都希奇;因为看见哑吧说话,残疾的 gesund wurden,Lahme 行走,Blinde 看见,他们就归荣耀给以色列的神。 || 15.31 so daß die Volksmengen sich verwunderten, als sie sahen, daß Stumme redeten, Krüppel gesund wurden, Lahme wandelten und Blinde sahen; und sie verherrlichten den Gott Israels.
|-
| 15.32 Jesus 叫门徒来,说:我 innerlich bewegt über 这众人,因为他们同我在这里已经三天,也没有吃的了。我不愿意叫他们饿着回去,恐怕在路上 verschmachten。 || 15.32 Als Jesus aber seine Jünger herzugerufen hatte, sprach er: Ich bin innerlich bewegt über die Volksmenge; denn schon drei Tage weilen sie bei mir und haben nichts zu essen; und ich will sie nicht entlassen, ohne daß sie gegessen haben, damit sie nicht etwa auf dem Wege verschmachten.
|-
| 15.33 门徒说:我们在这野地,那里有这么多的 Brot 叫这许多人吃饱呢? || 15.33 Und seine Jünger sagen zu ihm: Woher nehmen wir in der Einöde so viele Brote, um eine so große Volksmenge zu sättigen?
|-
| 15.34 Jesus 说:你们有多少 Brote?他们说:有七个,还有几条小鱼。 || 15.34 Und Jesus spricht zu ihnen: Wie viele Brote habt ihr? Sie aber sagten: Sieben, und wenige kleine Fische.
|-
| 15.35 他就 gebot 众人坐在地上, || 15.35 Und er gebot der Volksmenge, sich auf die Erde zu lagern.
|-
| 15.36 拿着这七个 Brote 和几条鱼,祝谢了,und brach,递给门徒;门徒又递给众人。 || 15.36 Und er nahm die sieben Brote und die Fische, dankte und brach und gab sie seinen Jüngern, die Jünger aber gaben sie den Volksmengen.
|-
| 15.37 众人都吃,并且吃饱了,收拾 übriggeblieben 的零碎,装满了七个 Körbe。 || 15.37 Und sie aßen alle und wurden gesättigt; und sie hoben auf, was an Brocken übrigblieb, sieben Körbe voll.
|-
| 15.38 吃的人,除了妇女孩子,共有四千。 || 15.38 Die aber aßen, waren viertausend Männer, ohne Weiber und Kindlein.
|-
| 15.39 Jesus 叫众人散去,就上船,来到马加丹的境界。|| 15.39 Und als er die Volksmengen entlassen hatte, stieg er in das Schiff und kam in das Gebiet von Magada.
|}
== Texte ==
=== [[n:zh:巴拿马宣布与中华人民共和国建交|Wikinews 巴拿马宣布与中华人民共和国建交]] ===
{{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
【2017年6月13日讯】
巴拿马总统胡安·卡洛斯·瓦雷拉宣布,与中华人民共和国建立正式外交关系。这无疑是对台湾外交努力的一大打击。<br/><br/>瓦雷拉总统是在巴拿马当地时间星期一晚上的全国电视讲话中做出这一宣布的。他在讲话中表示,中国是巴拿马运河的第二大用户,在银行,电讯等众多领域都发挥了重要作用。他坚信,中国对巴拿马来说是正确的选择。瓦雷拉称台湾是好朋友,并表示,希望台湾对此作出建设性的反应。台湾方面尚未对此发表评论。<br/><br/>巴拿马这次与中国建交,与台湾断交使台湾的邦交国降至20个。位于西非的圣多美与普林西比2016年年底刚刚与台湾断交。
}}
Noch keine Übersetzung
=== [https://archive.org/details/hienwunshoochin01davigoog Davis: Chinese moral maxims LXXXVII ]===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |作事须循天理.出言要顺人心.}} || zuo4 shi4 xu1 xun2 tian1 li3 . chu1 yan2 yao4 shun4 ren2 xin1 .|| In our actions we should accord with the will of Heaven: in our words we should consult the feelings of men.
|}
=== [https://archive.org/details/hienwunshoochin01davigoog Davis: Chinese moral maxims LXXXVII (traditionell)]===
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch |
<br/>作事須循天理.出言要順人心.
}}
||
<br/> zuo4 shi4 xu1 xun2 tian1 li3 . chu1 yan2 yao4 shun4 ren2 xin1 .
||
In our actions we should accord with the will of Heaven: in our words we should consult the feelings of men.
|}
== [[s:zh:弟子規 | 弟子规]] ==
{| class="wikitable"
|-
! Zeichen !! Pinyin !! Übersetzung
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 置冠服、有定位}} || zhi4 guan1/guan4 fu2 、 you3 ding4 wei4 || Zum Ablegen von Hut und Kleidern braucht es einen festgelegten Platz
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 勿乱顿、致污秽}} || wu4 luan4 dun4 、 zhi4 wu1 hui4 || Lege sie nicht unordentlich ab, sonst hat man Schweiß und Dreck
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 衣贵洁、不贵华}} || yi1 gui4 jie2 、 bu4 gui4 hua4 || Bei Kleidern schätze Reinheit, schätze nicht Schnickschnack
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 上循分、下称家}} || shang4 xun2 fen1 、 xia4 cheng1 jia1 || Vor allem folge den (Lebens)Abschnitten, nachfolgend soller dem Familienreichtum angemessen sein
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 对饮食、勿拣择}} || dui4 yin3 shi2 、 wu4 jian3 ze2 || Gegenüber Essen und Trinken sein nicht wählerisch
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 食适可、勿过则}} || shi2 di4/shi4 ke3/ke4 、 wu4 guo4 ze2 || Gerade genug zu essen ist ausreichend, überschreite nicht das richtige Maß
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 年方少、勿饮酒}} || nian2 fang1 shao3 、 wu4 yin3 jiu3 || Ist man an Jahren jung, trinke keinen Alkohol
|-
| {{:Vokabeltexte_Chinesisch/ Vorlage:Chinesisch | 饮酒醉、最为丑}} || yin3 jiu3 zui4 、 zui4 wei2/wei4 chou3 || Trinkt man Alkohol und ist betrunken, ist dies äußerst häßlich
|}
== [https://zh.wikibooks.org/zh-cn/德语/文法 德语 Kapitel 文法] ==
=== Text ===
介词
介词是学德语的难关之一。德语中有的介词要求其后的名词用与格,有的要求宾格,有的根据语句中的不同情况有时要求与格,有时要求宾格。一般来说表示某个状态的介词要求与格,表示向某个状态发展的介词要求宾格,但这里也有例外。以下是一个介词(auf)的例子:
要求与格(第三格):
auf dem Tisch 在桌子上
要求宾格(第四格):
auf den Tisch 往桌子上(去或放)
(这里是一个俗称,静三动四;物体在静止状态用第三格,物体在移动状态用第四格)
人称代词
人称代词表
人称 主格属格与格宾格
我(第一人称单数) ich mein mir mich
你(第二人称单数,一般用法) du dein dir dich
他(第三人称单数,阳性) er sein ihm ihn
她(第三人称单数,阴性) sie ihr ihr sie
它(第三人称单数,中性) es sein ihm es
我们(第一人称复数) wir unser uns uns
你们(第二人称复数,一般用法) ihr euer euch euch
他们(第三人称复数) sie ihr ihnen sie
您(第二人称尊称对方,无单复数之别) Sie Ihr Ihnen Sie
=== Übersetzung(shilfe) ===
Präpositionen
Präpositionen sind beim Lernen von Deutsch einer der Hauptschwierigkeiten.
Im Deutschen gibt es Präpositionen, bei denen man das nachfolgende im Dativ stehende Substantiv finden muss; es gibt welche bei denen das Substantiv im Akkusativ stehen muss; es gibt auch welche bei denen man je nach Satzstruktur mal das Substantiv im Dativ, mal im Akkusativ suchen muss.
Allgemein gesprochen verwendet man den Dativ, wenn die Präposition einen gewissen Zustand aufzeigt; zeigt sie eine Entwicklung auf verwendet man den Akkusativ.
Aber dabei gibt es auch Ausnahmen.
Nachfolgend einige Beispiele mit der Präposition "auf"
Der Dativ (der dritte Fall) wird benötigt bei: auf dem Tisch
Der Akkusativ (der vierte Fall) wird benötigt bei: auf den Tisch (hingehen oder etwas legen)
(Darin liegt einen Ausdruck: bei Ruhe den dritten, bei Bewegung den vierten)
Sind Objekte in einer stillstehenden Situation verwendet man den dritten Fall, sind die Dinge in Bewegung verwendet man den vierten Fall)
Personalpronomen
Tabelle der Personalpronomen
Person Nominativ (1. Fall) Genitiv (2. Fall) Dativ(3. Fall) Akkusativ (4. Fall)
Ich (erste Person Einzahl): ich mein mir mich
Du (zweite Person Einzahl, vertrauliche Anrede): du dein dir dich
Er (dritte Person Einzahl, männlich): er sein ihm ihn
Sie (dritte Person Einzahl, weiblich): sie ihr ihr sie
Es (dritte Person Einzahl, sächlich): es sein ihm es
Wir (erste Person Mehrzahl):wir unser uns uns
Ihr (zweite Person Mehrzahl, vertrauliche Anrede): ihr euer euch euch
Sie (dritte Person Mehrzahl): sie ihr ihnen sie
Sie (zweite Person förmliche Anrede, keine Unterscheidung zwischen Einzahl und Mehrzahl): Sie Ihr Ihnen Sie
<noinclude>
{{Navigation zurückhochvor|
zurücktext=Lektion 630|
zurücklink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 630|
hochtext=Buch Vokabellektionen|
hochlink=Vokabeltexte_Chinesisch/_Vokabellektionen|
vortext=Lektion 632|
vorlink=Vokabeltexte_Chinesisch/_Vokabellektionen/ Lektion 632}}
</noinclude>
oucizxxvf6wykjrvq2hr1gtkbgj0mmb
Gitarre: Akkordprogressionen/ Ein 14-55er
0
118383
1088532
1064456
2026-07-01T12:26:45Z
Mjchael
2222
/* Ein 14-55er */
1088532
wikitext
text/x-wiki
== Ein 14-55er ==
Eine klassische Durkadenz mit [[Gitarre: schneller Griffwechsel|schnellem Griffwechsel]] die sich ständig wiederholt.
://: (C F) G ://
://: (D G) A ://
://: (G C) D ://
#{{Youtube-Suche|Guantanamera|Guantanamera}}
#{{Youtube-Suche|La+bamba|La Bamba}}
#{{Youtube-Suche|twist+and+shout+Beatles|Twist and Shout (Beatles)}}
# {{Youtube-Suche|Do+You+Love+Me+The+Contours|Do You Love Me (The Contours) }}
; ähnlich
#{{Youtube-Suche|breakfast+at+tiffany%27s+Deep+Blue+Something|breakfast at tiffany's (Deep Blue Something)}} D-(GA) - Ref.: D-(AG)
<noinclude>
{{:Gitarre/ Navi|Rockballadendiplom|
{{:Gitarre: Rockballadendiplom/ Akkordprogressionen/ Navi}}
|img=Rockballadendiplom.gif|bg=#dddddd|border=#F29E00|color=#F29E00|px=100}}
</noinclude>
mcnhtuztrpg6rb42l65wp6mttajhnz6
Astronomie von der Frühgeschichte bis zur Neuzeit/ Bedeutung in anderen Disziplinen
0
121622
1088538
1088512
2026-07-02T01:48:42Z
Bautsch
35687
/* Astronomische Bezüge */ Sternenhimmel im Jahr 25
1088538
wikitext
text/x-wiki
Viele Bezeichnungen für verschiedene Lehren werden mit der aus dem Altgriechischen stammenden Endung "-logie" (altgriechisch λόγος ("logos"), zu Deutsch „Lehre“) gebildet. Die folgenden Disziplinen sind in diesem Kontext hervorzuheben, da sie insbesondere für die '''{{w|Archäoastronomie}}''' wertvolle wissenschaftliche Ergänzungen zur '''{{w|Astronomie}}''' (aus den altgriechischen Wörtern ἄστρον ("ástron", zu Deutsch „Stern“) und νόμος ("nómos, zu Deutsch „Gesetz“) zusammengesetzt also „Sterngesetz“) liefern:
* Die '''{{w|Archäologie}}''' (zusammengesetzt mit dem altgriechischen Wort ἀρχαῖος ("archaios"), zu Deutsch „Altertumslehre“) beschäftigt sich mit der kulturellen Entwicklung der Menschheit.
* Die '''{{w|Etymologie}}''' (zusammengesetzt mit dem altgriechischen Wort ἔτυμος ("etymos"), zu Deutsch „Wortherkunftslehre“) untersucht die geschichtliche Herkunft von Wörtern.
* Die '''{{w|Mythologie}}''' (zusammengesetzt mit dem altgriechischen Wort μῦθος ("mythos"), zu Deutsch „Erzählungslehre“), die sich wissenschaftlich mit der Sagenwelt beschäftigt.
* Die '''{{w|Theologie}}''' (zusammengesetzt mit dem altgriechischen Wort θεός ("theós"), zu Deutsch „Gotteslehre“) mit ihren Lehren zum religiösen Glauben und dessen Glaubensdokumenten.
* Die '''{{w|Kosmologie}}''' (zusammengesetzt mit dem altgriechischen Wort κόσμος ("kósmos"), zu Deutsch „Weltenlehre“) ist hingegen eine Lehre, die sich im Laufe der Jahrtausende deutlich verändert hat und sich auch heute noch erheblich weiterentwickelt, da es in der modernen Astronomie und Astrophysik mit zunehmend hohem technischem Aufwand immer wieder zu neuen Erkenntnissen kommt.
* Die '''{{w|Numerologie}}''' (zusammengesetzt mit dem lateinischen Wort numerus, zu Deutsch „Zahlenlehre“) mit ihren mystischen Lehren über die symbolische Zuweisung von Bedeutungen an Zahlen.
Von der Antike bis ins Mittelalter galt die Beherrschung der '''{{w|sieben freien Künste}}''' als Voraussetzung für das Betreiben von Philosophie. Zu den drei "trivialen" Künsten der {{w|Grammatik}}, der {{w|Rhetorik}} und der {{w|Dialektik}} des '''{{w|Trivium|Triviums}}''' wurden die vier Künste der {{w|Musiktheorie}}, der {{w|Arithmetik}}, der {{w|Geometrie}} und der {{w|Astronomie}} zu den Künsten des '''{{w|Quadrivium|Quadriviums}}''' gezählt → siehe hierzu auch [[Quadriviale_Kuriositäten|'''Wikibook ''Quadriviale Kuriositäten''''']].
== Zur Etymologie ==
Die Genesis aus dem Alten Testament greift die Thematik der Verwirrung der einheitlichen Sprache in ihrem elften Kapitel auf, und beschreibt, wie die bereits sternenkundigen Menschen im Norden Mesopotamiens übermütig geworden waren und in Babel einen Turm mit einer Spitze '''bis in den Himmel''' errichten wollten:<ref>[https://www.bibleserver.com/EU/1.Mose11 Genesis 11], Genesis, Kapitel 11, Einheitsübersetzung</ref>
<blockquote>
1 Die ganze Erde hatte eine Sprache und ein und dieselben Worte.<br/>
2 Als sie ostwärts aufbrachen, fanden sie eine Ebene im Land Schinar und siedelten sich dort an.<br/>
3 Sie sagten zueinander: Auf, formen wir Lehmziegel und brennen wir sie zu Backsteinen. So dienten ihnen gebrannte Ziegel als Steine und Erdpech als Mörtel.<br/>
4 Dann sagten sie: Auf, bauen wir uns eine Stadt und einen Turm mit einer Spitze '''bis in den Himmel'''! So wollen wir uns einen Namen machen, damit wir uns nicht über die ganze Erde zerstreuen.<br/>
5 Da stieg der HERR herab, um sich Stadt und Turm anzusehen, die die Menschenkinder bauten.<br/>
6 Und der HERR sprach: Siehe, ein Volk sind sie und eine Sprache haben sie alle. Und das ist erst der Anfang ihres Tuns. Jetzt wird ihnen nichts mehr unerreichbar sein, wenn sie es sich zu tun vornehmen.<br/>
7 Auf, steigen wir hinab und verwirren wir dort ihre Sprache, sodass keiner mehr die Sprache des anderen versteht.<br/>
8 Der HERR zerstreute sie von dort aus über die ganze Erde und sie hörten auf, an der Stadt zu bauen.<br/>
9 Darum gab man der Stadt den Namen Babel, Wirrsal, denn dort hat der HERR die Sprache der ganzen Erde verwirrt und von dort aus hat er die Menschen über die ganze Erde zerstreut.
</blockquote>
Es mag weniger verwunderlich sein, dass Schöpfungsmythen oder Berichte über Katastrophen nicht nur einen astronomischen Hintergrund haben, sondern in völlig verschiedenen Kulturen sehr ähnliche Merkmale zeigen, wenn man sich das Folgende bewusst macht: Einige Indizien deuten auf einen für viele Kulturen gemeinsamen Ursprung hin, der auf eine tiefsinnige Betrachtung und Beobachtung des Himmelsgeschehens hindeutet.
Bei bestimmten Wörtern sind die Ähnlichkeiten in vielen lebenden und toten Sprachen so auffällig, dass sie ein gemeinsames Ursprungswort (Etymon) haben und somit Kognaten sein dürften.
=== "Stern" ===
Bei den Wörtern „Gestirn“ beziehungsweise „Stern“ sind die Ähnlichkeiten in vielen lebenden und toten Sprachen sehr auffällig, und diese Verwandtschaften mögen durch die Wörter für "Stern" in den folgenden Sprachen belegt werden:
* Akkadisch "istar"
* Indogermanisch "ster"
* Griechisch "astro" / "asteri"
* Lateinisch "astrum" / "stella"
* Althochdeutsch "stern(o)"
* Jiddisch "shtern"
* Katalanisch und Spanisch "estrella"
* Portugiesisch "estrela"
* Englisch "star"
* Niederländisch "ster"
* Westfriesisch "stjer"
* Italienisch und Korsisch "stella"
* Rumänisch "stea"
* Sardisch "istedda"
* Maltesisch "stilla"
* Französisch "étoile" aus Altfranzösisch "estoile"
* Galicisch "estrela"
* Walisisch "seren"
* Dänisch und Norwegisch "stjerne"
* Schwedisch "stjärna"
* Isländisch "stjarna"
* Kurdisch "stêrk"
* Gujarati "Tārō"
* Hindi "तारा" (taara)
* Marathi "तारा" (Tārā)
* Nepalesisch "तारा" (Tārā)
* Punjabi "ਤਾਰਾ" (Tārā)
* Singhalesisch "තරුව" (taruva)
* Khmer "តារា" (tara)
* Armenisch "աստղ" (astgh)
* Tadschikisch "ситора" (sitora)
* Hausa "tauraro"
* Krio "sta"
=== "Stier" ===
Eine starke Ähnlichkeit gibt es in vielen Sprachen auch zwischen den Wörtern „Stern“ und „Stier“. Der Stier bezeichnet zudem auch ein bedeutendes und eines der ältesten Sternbilder überhaupt:
→ Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|'''Himmelsstier''']].
* Akkadisch und Assyrisch "šūru"
* Aramäisch "tōra"
* Hebräisch "šǒr"
* Ugaritisch "twr"
* Arabisch "ثور" ("thawr")
* Griechisch "ταύρος" ("tauros")
* Lateinisch "taurus"
* Althochdeutsch "stior"
* Italienisch, Katalanisch und Spanisch "toro"
* Galicisch "touro"
* Gallisch "tarvos"
* Französisch "taureau"
* Schwedisch "tjur"
* Dänisch "tyr"
* Irisch und Gälisch "tarbh"
* Wallisisch "tarw"
=== "Horn" ===
Auch die Hörner des Stieres betreffend setzen sich die vielen Ähnlichkeiten fort:
* Akkadisch "carnu"
* Aramäisch "qeren"
* Griechisch "κόρνο" ("korno")
* Lateinisch "cornu"
* Maltesisch "qrun"*
* Arabisch "قرون" ("qurun")
* Französisch "corne"
* Italienisch "corne"
* Rumänisch "corn"
* Haitianisch "kòn"
=== "Sieben" ===
Die in vielen Kulturen als heilig angesehene Zahl Sieben taucht im Zusammenhang mit der Astronomie als Anzahl der mit bloßem Auge sichtbaren Wandelgestirne und als Zahl der Hauptsterne in vielen Asterismen auf:
* Sieben Wandelgestirne: Sonne Mond, Merkur, Venus, Mars, Jupiter, Saturn
* Siebengestirn im Himmelsstier: Alkione, Atlas, Electra, Maia, Merope, Taygeta, Pleione
* Sternbild Orion: Beteigeuze, Rigel, Bellatrix, Alnilam, Alnitak, Saiph, Mintaka
* Asterismus Großer Wagen: Alioth, Dubhe, Alkaid, Mizar, Merak, Phekda, Megrez
→ Siehe auch:
* [[Quadriviale_Kuriositäten/_Zahlen#Zur_Sieben|'''Zur Sieben''']].
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Der_Fixsternhimmel#Die_sieben_hellsten_Objekte_der_Ekliptik|'''Die sieben hellsten Objekte der Ekliptik''']].
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Kalenderführung#Die_Siebentagewoche|'''Die Siebentagewoche''']].
Wegen der hohen kulturellen, rituellen oder mythischen Bedeutung gibt es in vielen Kulturen und Sprachen etymologische Übereinstimmungen:
* Akkadisch "sebe"
* Proto-Indoeuropäisch "septḿ̥"
* Hetitisch "sipta"
* Proto-Germanisch "*sebun"
* Althochdeutsch "sibun"
* Hebräisch "sajin" (Buchstabe) oder "scheva" (Wort)
* Etruskisch "semph"
* Maltesisch "sebgħa"
* Arabisch "sabʿa"
* Griechisch "επτά" ("(h)epta")
* Lateinisch "septem"
* Ungarisch "het"
* Proto-Balto-slawisch "septin"
* Proto-Indo-Iranisch "saptá"
* Katalanisch "set"
* Spanisch "siete"
* Galicisch "sete"
* Lettisch "septiņi"
* Italienisch "sette"
* Französisch "sept"
* Englisch "seven"
* Wallisisch "saith"
* Bosnisch / Kroatisch "sedam"
* Rumänisch "șapte"
* Irisch "seacht"
* Swahili "saba"
* Haitianisch "sèt"
== Zur Mythologie ==
Seit Jahrtausenden blicken Menschen in den Nachthimmel und versuchen, die unzähligen Lichter am Firmament zu deuten. Schon früh begannen sie, die von ihnen erfundenen Sternbilder und die unablässig durch den Himmel ziehenden Wandelgestirne durch Geschichten über Götter, Helden oder andere Wesen zu interpretieren, zu erzählen und zum Teil über Jahrhunderte hinweg zu tradieren. Die '''Mythologie''' spielte dabei eine zentrale Rolle: Sie half nicht nur, eine symbolische Ordnung in den geheimnisvollen Kosmos zu bringen, sondern prägte auch viele der Bezeichnungen und Vorstellungen, die bis heute in der beschreibenden Astronomie überlebt haben.
Die Verbindung zwischen Mythologie und Astronomie ist tief verwurzelt und zeugt vom menschlichen Bedürfnis, das wahrgenommene, aber dennoch unfassbare Universum durch räumliche und zeitliche Vorstellungen sowie durch Erzählungen begreifbar zu machen. Das Geschehen am Himmel musste auf die Menschen vor der Erfindung der Bewegtbilder und des Films in der späten Neuzeit sowohl attraktiv als auch spektakulär gewirkt haben. So konnten verschiedene mythische Gestalten am Himmel durch ihre scheinbaren Handlungen wahrgenommen werden. Durch die Wiederholung solcher Deutungen konnten sich besonders beliebte Mythen im kulturellen Kontext über die Zeit verfestigen, und entsprechende Riten konnten sich etablieren.
Damit war auch eine wesentliche Voraussetzung für den Glauben der Menschen an eine höhere Macht oder mehrere höhere Mächte gegeben. Der Begriff '''Religion''' stammt vom lateinischen Inifiniv "relegere" ab. Dieses Verb bedeutet wörtlich übersetzt "wieder lesen" und meint im Sinne von "überdenken" das bewusste Wahrnehmen von Prophezeiungen oder Omen sowie das nachhaltige Beachten tradierter Vorschriften.
'''→ Siehe:'''
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|'''Der Urozean''']].
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Sagenwelt|'''Die Plejaden / Sagenwelt''']].
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Mythologie|'''Der Himmelsstier''']].
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Babylonische_Himmelswege|'''Babylonische Himmelswege''']].
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Mithraskult|'''Mithraskult und Tauroktonie''']].
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Höhlenmalerei_in_der_Magura-Höhle|'''Die Höhlenmalerei in der Magura-Höhle''']].
== Zur Theologie ==
Die '''Theologie''' (vom Altgriechischen θεός = theós = Gott und λόγος = lógos = Lehre) ist die Lehre von einem Gott oder von mehreren Göttern. Sie lehrt einen ausgeprägten religiösen Glauben, begründet rituelle Traditionen und deutet die vorhandenen Glaubensdokumente.
[[Datei:Aristoteles.Theologie.png|mini|rechts|Wahrnehmbarkeit und Vergänglichkeit nach Aristoteles]]
Die Theologie des '''{{w|Aristoteles}}''' (384–322) postuliert drei mögliche Substanzen:<ref>Aristoteles: ''Metaphysik'', Kapitel XII (Λ), Philosophische Theologie, Seiten 1069a –1076a</ref>
{| class="wikitable"
|+ Mögliche Substanzen nach Aristoteles
! Nummer !! Substanz !! Erläuterung !! Interpretationsbeispiel
|-
| 1. || Die sinnlich wahrnehmbare und vergängliche Substanz || Konkrete Dinge, die nur eine begrenzte Teilhabe an der Ewigkeit haben. || Lebewesen
|-
| 2. || Die sinnlich wahrnehmbare und unvergängliche Substanz || Konkrete Dinge, die eine unbegrenzte Teilhabe an der Ewigkeit haben. || Die sieben Wandelgestirne und die Fixsterne
|-
| 3. || Die sinnlich nicht wahrnehmbare und unvergängliche Substanz || Lebendiger, unbewegter Beweger, der der Ursprung aller anderen Dinge ist. || Gott
|}
Dieses theologische Prinzip wurde später auch von '''{{w|Thomas van Aquin}}''' (1225-1274) in seinen ''Quinque viae ad Deum'' ("Fünf Wege zu Gott") aufgegriffen:
{| class="wikitable"
|+ Nach dem ''Quinque viae ad Deum'' ("Fünf Wege zu Gott") von Thomas von Aquin
! Weg !! Bezeichnung !! Voraussetzung !! Feststellung !! Folgerung
|-
| Via I || Bewegungsbeweis || In der Welt ist überall Bewegung. || Alles Bewegte muss von einem anderen in Bewegung gebracht worden sein. || Der Erstbeweger ist Gott.
|-
| Via II || Kausalitätsbeweis || In der Welt gibt es überall Ursachen und Wirkungen. || Jede Wirkung muss eine Ursache haben. || Die erste Ursache der Welt ist Gott.
|-
| Via III || Kontingenzbeweis || Alles Empirische in der Welt entsteht und vergeht wieder. || Jedes empirische Wesen muss das Sein von einem absoluten Wesen empfangen haben. || Das absolute Wesen ist Gott.
|-
| Via IV || Stufenbeweis || In der Welt gibt es abgestuft gute, wahre und schöne Dinge. || Das absolute Wesen muss die höchste Güte, Wahrheit und Schönheit haben. || Das höchste Gute, Wahre und Schöne ist Gott.
|-
| Via V || Finalitätsbeweis || In der Welt gibt es Ordnung und Gesetzmäßigkeit. || Ordnung und Gesetzmäßigkeit müssen auf einen denkenden Geist zurückgehen. || Dieser Geist kommt von Gott.
|}
Auch '''{{w|Gottfried Wilhelm Leibniz}}''' (1646-1717) lehnt sich in seiner Hypothese von „Gott als letztem und zureichendem Grund der Welt“ daran an.
Auch im 90. Psalm wird dieser Ansatz thematisiert:
<blockquote>
Das vierte Buch<br/>
Der '''ewige''' Gott – der '''vergängliche''' Mensch<br/><br/>
1 Ein Bittgebet des Mose, des Mannes Gottes. O Herr, du warst uns Wohnung '''von Geschlecht zu Geschlecht'''.<br/>
2 '''Ehe geboren wurden die Berge, ehe du unter Wehen hervorbrachtest Erde und Erdkreis''', bist du '''Gott von Ewigkeit zu Ewigkeit'''.<br/>
3 '''Zum Staub zurückkehren lässt du den Menschen''', du sprichst: Ihr Menschenkinder, kehrt zurück!<br/>
4 Denn tausend Jahre sind in deinen Augen wie der Tag, der gestern vergangen ist, wie eine Wache in der Nacht.
</blockquote>
Darüber hinaus gibt der vierte Vers einen deutlichen Hinweis auf das Verhältnis zwischen der Länge des viele Jahrtausende dauernden Präzessionszyklus und der Länge eines siderischen Monats: der Mond wandert entlang der Ekliptiklinie an einem Tag genauso weit wie der Frühlingspunkt in tausend Jahren.
→ Siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Präzession|'''Präzession''']].
Der griechische Dichter '''{{w|Aratos von Soloi}}''' in Kilikien (≈310–245) hatte seine astronomischen Kenntnisse vom Astronomen und Mathematiker '''{{w|Eudoxos von Knidos}}''' (geboren nach 390, gestorben nach 338) erhalten. In dem in der Antike verbreiteten Lehrgedicht Φαινόμενα (Phainomena = „Himmelserscheinungen“) von Aratos wird der Sternenhimmel in zahlreichen Hexametern beschrieben. Sein monumentales sechseckiges Grab aus der antiken Stadt Pompeiopolis wurde 2020 in der türkischen Provinz Mersin wiederentdeckt.<ref>Patricia Claus: [https://greekreporter.com/2021/07/11/memorial-tomb-of-ancient-greek-astronomer-aratus-unearthed-in-turkey/ Memorial Tomb of Ancient Greek Astronomer Aratus Unearthed in Turkey], The Greek Reporter, 11. Juli 2021</ref>
Hier der Beginn des Prologs des Lehrgedichts:
<blockquote>
Εκ Διὸς ἀρχώμεσθα , τὸν οὐδέποτ᾽ ἄνδρες ἐῶμεν<br/>
῎Αῤῥητον . Μεσταὶ δὲ Διὸς πᾶσαι μὲν ἀγυιαὶ ,<br/>
Πᾶσαι δ᾽ ἀνθρώπων ἀγοραί · μεστὴ δὲ θάλασσα ,<br/>
Καὶ λιμένες. πάντη δὲ Διὸς κεχρήμεθα πάντες .<br/>
'''Τοῦ γὰρ καὶ γένος εἰμέν''' · ὁ δ᾽ ἤπιος ἀνθρώποισι<br/>
Δεξιὰ σημαίνει · λαοὺς δ᾽ ἐπὶ ἔργον ἐγείρει ,<br/>
Μιμνήσκων βιότοιο . λέγει δ᾽ , ὅτε βῶλος ἀρίστη<br/>
Βουσί τε καὶ μακέλῃσι · λέγει δ᾽ , ὅτε δεξιαὶ ὧραι ,<br/>
Καὶ φυτὰ γύρῶσαι , καὶ σπέρματα πάντα βαλέσθαι .<br/>
Αὐτὸς γὰρ τάγε σήματ᾽ ἐν '''οὐρανῷ''' ἐστήριξεν ,<br/>
'''Αστρα''' διακρίνας · ἐσκέψατο δ᾽ εἰς ἐνιαυτὸν<br/>
'''᾿Αστέρας''' , οἵ κε μάλιστα τετυγμένα σημαίνοιεν<br/>
᾿Ανδράσιν ὡράων , ὄφρ᾽ ἔμπεδα πάντα φύωνται .<br/>
Τῷ μιν ἀεὶ πρῶτόν τε καὶ ὕστατον ἱλάσκονται .<br/>
Χαῖρε , πάτερ , μέγα θαῦμα , μέγ᾽ ἀνθρώποισιν ὄνειαρ ,<br/>
Αὐτὸς καὶ προτέρη γενεή ! χαίροιτε δὲ , Μοῦσαι<br/>
Μειλίχιαι , μάλα πᾶσαι ! ἐμοί γε μὲν '''ἀστέρας''' εἰπεῖν ,<br/>
Ηἱ θέμις εὐχομένῳ , τεκμήρατε πᾶσαν ἀοιδήν .<br/>
Οἱ μὲν ὁμῶς πολέες τε , καὶ ἄλλυδις ἄλλοι ἐόντες ,<br/>
'''Οὐρανῷ''' ἕλκονται πάντ᾽ ἤματα συνεχὲς αἰεί.<br/>
Αὐτὰρ ὅγ᾽ οὐδ᾽ ὀλίγον μετανίσσεται · ἀλλὰ μάλ' αὕτως<br/>
'''῎Αξων''' οἱ ἐνάρηρεν · ἔχει δ᾽ ἀτάλαντον ἁπάντη<br/>
'''Μεσσηγὺς γαῖαν''' , περὶ δ᾽ '''οὐρανὸν''' αὐτὸν ἀγινεῖ.<br/>
Καί μιν πειραίνουσι δύω '''πόλοι''' ἀμφοτέρωθεν ·<br/>
᾿Αλλ᾽ ὁ μὲν οὐκ ἐπίοπτος · ὁ δ᾽ ἀντίος ἐκ '''Βορέαο''' ,<br/>
Ὑψόθεν Ὠκεανοῖο . Δύω δὲ μιν ἀμφὶς ἔχουσαι<br/>
'''Ἄρκτοι''' ἅμα τροχόωσι · τὸ δὴ καλέονται '''῞Αμαξαι''' .
</blockquote>
Übersetzung unter Beibehaltung der Hexameter nach dem deutschen Dichter, Übersetzer und Hochschullehrer Johann Heinrich Voss (1751–1826) von 1824:<ref>АРАТОΥ ΦΑΙΝΟΜΕΝΑ ΚΑΙ ΔΙΟΣΗΜΕΙΑ. Des Aratos Sternerscheinungen und Wetterzeichen. Übersetzt und erklärt von Johann Heinrich Voss. Heidelberg bei Christian Friedrich Winter. 1824.</ref>
<blockquote>
Zeus sei unser Beginn , und niemals bleib' er uns Männern<br/>
Ungelobt. Voll wahrlich des Zeus sind alle des Wandels<br/>
Weg' , und alle Versammlung der Welt ; voll jegliche Meerflut ,<br/>
Jeglicher Port ; ringsum ja des Zeus bedürfen wir alle .<br/>
'''Seines Geschlechts auch sind wir''' ; und Er , mildherzig den Menschen,<br/>
Zeichnet, was frommt, rechtsher ; und zu Tätigkeit weckt er die Völker,<br/>
Mahnend an Lebensbedarf : Er sagt , wann besser dem Pflugstier<br/>
Fuge die Scholl' , und dem Karst ; er sagt , wann schickliche Jahrszeit,<br/>
Dass man die Pflanze behäuf" , und einsenk' allerlei Anwachs .<br/>
Denn selbst hat er die Zeichen am oberen '''Himmel''' befestigt ,<br/>
Und '''Sternbilder''' verteilt ; er hat fürsehend dem Jahrlauf<br/>
'''Sterne''' bestimmt , die den Menschen zumeist annahende Wechsel<br/>
Deuteten jeglicher Zeit , dass in Völligkeit alles erwachse .<br/>
Drum ihn immer zuerst , und zulezt ihn , sühnen sie feiernd.<br/>
Heil , anstaunlicher Vater , den Sterblichen mächtiges Labsal ,<br/>
Du auch , selbst des Geschlechts Ursprung ! Heil , freundliche Musen,<br/>
Heil euch allen gesamt ! doch mir , der , die '''Sterne''' zu melden ,<br/>
Euch , wie geziemt , anfleht , bringt allen Gesang zur Vollendung.<br/>
Jene zugleich , so viele zerstreuete , andere anders ,<br/>
Ziehn mit dem '''Himmel''' einher in ewigem Zuge beständig .<br/>
Doch nie schwanket er selbst um ein weniges; sondern durchaus so<br/>
Bleibt ihm die '''Axe''' geheftet ; die hält gleichschwebend vom Umfang<br/>
Hier '''in der Mitte die Erd'''' , und umher dort dreht sie den '''Himmel''' .<br/>
Sie dann hat zween '''Pol'''' an jeglichem Ende gerichtet :<br/>
Unsichtbar ist jener; doch hier um den '''Boreas''' ragt er<br/>
Ob dem Okeanos hoch. Zwo dem zu den Seiten gestellte<br/>
'''Bärinnen''' rollen umher: drum auch '''Rollwagen''' benamet.
</blockquote>
'''''Hinweise:'''''
* Die "Axe" beschreibt die Erdachse.
* ''Mit dem "Boreas" ist der Himmelsnordpol gemeint.''
* ''Bei den beiden Bärinnen handelt es sich um die Sternbilder des Großen Bären (Ursa Maior) und des Kleinen Bären (Ursa Minor).''
* ''Die beiden Rollwagen sind bei uns heute die Asterismen Großer Wagen und Kleiner Wagen.''
Der Apostel '''{{w|Paulus von Tarsus}}''' (geboren vor 10, gestorben nach 60) war der bedeutendste Missionar des Urchristentums und kannte diesen Text offensichtlich. Im 17. Kapitel der Apostelgeschichte des Lukas wird ihm ein Zitat aus dem Prolog des Lehrgedichts über die Abstammung der Menschen von Gott in den Mund gelegt.<ref>[https://www.die-bibel.de/bibel/NA28,EUE/ACT.17.28 Apostelgeschichte 17,28], Abschnitt: ''Paulus in Athen'', Novum Testamentum Graece und Einheitsübersetzung</ref>
<blockquote>
Apostelgeschichte 17,28: '''Τοῦ γὰρ καὶ γένος ἐσμέν.'''
</blockquote>
<blockquote>
Apostelgeschichte 17,28: '''Wir sind von seinem Geschlecht.'''
</blockquote>
=== Zahlen in Religionen ===
Die '''Zwei''' steht oft für Gegensätze, wie zum Beispiel Tag und Nacht, Aufgang und Untergang, Sommerhalbjahr und Winterhalbjahr, zunehmender und abnehmender Mond oder obere und untere Kulmination. Eine solche Zweiteilung findet sich oft auch in gegensätzliche Kategorien wieder, die in vielen Disziplinen, insbesondere auch in der Ethik und in Religionen verwendet werden, wie beispielsweise gut und böse, oben und unten, Leben und Tod, Licht und Schatten, Wärme und Kälte oder Himmel und Hölle.
Interessant ist auch die frühgeschichtliche astronomische Auffassung von '''zwei''' mächtigen Gegenspielern, die sich im Sternenhimmel an zwei gegenüberliegenden Seiten befinden, der [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|der Himmelsstier]] und der [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsskorpion|der Himmelsskorpion]].
→ Siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Zwei|'''Zur Zwei''']].
Die astronomischen Zahlen '''Sieben''' und '''Zwölf''' werden als heilige Zahlen angesehen. Sie werden in vielfältigen Kontexten in religiösen Texten erwähnt und für viele religiöse Symbole verwendet. Ferner spielt auch die astronomische Zahl '''Vier''' in Religionen eine bedeutende Rolle, wo sie deswegen manchmal ebenfalls als heilige Zahlen angesehen wird:
* '''Vier''' Hauptsterne respektive Hauptsternbilder mit den '''vier''' Himmelsrichtungen und den '''vier''' Jahreszeiten: → siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Vier_in_Religionen|'''Bedeutung der Vier in Religionen''']].
* '''Sieben''' Wandelgestirne mit den die '''sieben''' Tagen einer Woche beziehungsweise eines Mondviertels: → siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Sieben_in_Religionen|'''Bedeutung der Sieben in Religionen''']].
* '''Zwölf''' Ekliptiksternbilder, '''zwölf''' Monate pro Jahr, '''zwölf''' Jahre Umlaufzeit des Planeten Jupiter, jeweils '''zwölf''' Stunden Tag und Nacht: → siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Zwölf_in_Religionen|'''Bedeutung der Zwölf in Religionen''']].
=== Altes Testament ===
In der Bibel wird in der Regel nicht zwischen Fixsternen und Planeten unterschieden. Eine Ausnahme gibt es im 2. Buch der Könige, Kapitel 23, Vers 5 aus dem siebenten vorchristlichen Jahrhundert, wo in der deutschsprachigen Einheitsübersetzung von "den Wandelsternen" und in der Luther-Bibel von "den Planeten" die Rede ist. Die Vulgata schreibt hier allerdings von den "duodecim signis", womit sicherlich die zwölf Sternzeichen der Ekliptik gemeint sind, durch die die sieben Wandelgestirne ziehen. Die Septuaginta spricht noch allgemeiner von den "μαζουρωθ" nach dem Hebräischen Wort "מַזָּלָה" ("mazzaroth"), womit vermutlich Sternkonstellationen und im engeren Sinne ebenfalls die zwölf Sternzeichen des Zodiaks gemeint sind:
<blockquote>
'''Septuaginta '''<br/>
5 καὶ κατέπαυσεν τοὺς χωμαριμ, οὓς ἔδωκαν βασιλεῖς Ιουδα καὶ ἐθυμίων ἐν τοῖς ὑψηλοῖς καὶ ἐν ταῖς πόλεσιν Ιουδα καὶ τοῖς περικύκλῳ Ιερουσαλημ, καὶ τοὺς θυμιῶντας τῷ Βααλ καὶ τῷ ἡλίῳ καὶ τῇ σελήνῃ καὶ τοῖς '''μαζουρωθ''' καὶ πάσῃ τῇ δυνάμει τοῦ οὐρανοῦ.<br/>
<br/>
'''Vulgata'''<br/>
5 Et delevit aedituos, quos posuerant reges Iudae ad sacrificandum in excelsis per civitates Iudae et in circuitu Ierusalem, et eos, qui adolebant Baal et soli et lunae et '''duodecim signis''' et omni militiae caeli.<br/>
<br/>
'''Einheitsübersetzung (2016)'''<br/>
5 Auch setzte er die Götzenpriester ab, die von den Königen von Juda bestellt worden waren und die auf den Kulthöhen, in den Städten Judas und in der Umgebung Jerusalems Opfer verbrannt sowie dem Baal, der Sonne, dem Mond, den '''Wandelsternen''' und dem ganzen Heer des Himmels geopfert hatten.<br/>
<br/>
'''Luther-Bibel (2017)'''<br/>
5 Und er setzte die Götzenpriester ab, die die Könige von Juda eingesetzt hatten, um auf den Höhen zu opfern in den Städten Judas und um Jerusalem her; auch die dem Baal geräuchert hatten, der Sonne und dem Mond und den '''Planeten''' und allem Heer am Himmel.<br/>
</blockquote>
Der Prophet Habakuk erwähnt in seinem Psalm in Kapitel 3 aus dem siebenten vorchristlichen Jahrhundert das Konzept der Aufteilung der Ekliptik in Mondstationen respektive in Mondhäuser:
<blockquote>
10 Wenn sie dich sehen, erbeben die Berge,<br/>
das Tosen der Wasser rauscht vorüber; es erhebt die Urflut ihre Stimme,<br/>
hoch oben vergisst die Sonne ihre Strahlen.<br/>
11 '''Der Mond bleibt in der Behausung;'''<br/>
als Beleuchtung schwirren deine Pfeile,<br/>
als heller Schein das Blitzen deiner Lanze.
</blockquote>
In den folgenden Bibelstellen aus dem Alten Testament spiegeln sich astronomische Vorstellungen in Bezug auf Gott wider:
'''Genesis 1:'''
<blockquote>
1 Im Anfang erschuf Gott '''Himmel''' und Erde.<br/>
2 Die '''Erde''' war wüst und wirr und '''Finsternis''' lag über der '''Urflut''' und Gottes Geist schwebte über dem '''Wasser'''.<br/>
3 Gott sprach: Es werde '''Licht'''. Und es wurde '''Licht'''.
...<br/>
5 Und Gott nannte das Licht '''Tag''' und die Finsternis nannte er '''Nacht'''. Es wurde '''Abend''' und es wurde '''Morgen''': erster Tag.<br/>
...<br/>
14 Dann sprach Gott: Lichter sollen am '''Himmelsgewölbe''' sein, um '''Tag''' und '''Nacht''' zu scheiden. Sie sollen als Zeichen für '''Festzeiten''', für '''Tage''' und '''Jahre''' dienen.<br/>
15 Sie sollen Lichter am Himmelsgewölbe sein, um über die Erde hin zu leuchten. Und so geschah es.<br/>
16 Gott machte '''die beiden großen Lichter''', das große zur Herrschaft über den '''Tag''', das kleine zur Herrschaft über die '''Nacht''', und die '''Sterne'''.
</blockquote>
'''Psalm 8:'''
<blockquote>
4 Seh ich deine '''Himmel''', die Werke deiner Finger, '''Mond '''und '''Sterne''', die du befestigt.
</blockquote>
[[Datei:Johannes.Kepler.Coeli.enarrant.gloriam.Dei.png|mini|rechts|Portrait des jungen Johannes Keplers mit dem Motto "Coeli enarrant gloriam Dei." nach Psalm 19: "Die Himmel erzählen die Herrlichkeit Gottes."]]
'''Psalm 19:'''
<blockquote>
2 Die '''Himmel''' erzählen die Herrlichkeit Gottes und das '''Firmament''' kündet das Werk seiner Hände.
</blockquote>
'''Psalm 90:'''
<blockquote>
2 Ehe geboren wurden die Berge, ehe du unter Wehen hervorbrachtest '''Erde''' und '''Erdkreis''', bist du Gott von Ewigkeit zu Ewigkeit.
</blockquote>
'''Psalm 102:'''
<blockquote>
26 Vorzeiten hast du der Erde Grund gelegt, die '''Himmel''' sind das Werk deiner Hände.
</blockquote>
'''Psalm 103:'''
<blockquote>
19 Der HERR hat seinen Thron errichtet im '''Himmel''', seine königliche Macht beherrscht '''das All'''.
</blockquote>
'''Psalm 104:'''
<blockquote>
19 Du machst den '''Mond''' zum Maß für die Zeiten, die '''Sonne''' weiß, wann sie untergeht.
</blockquote>
'''Psalm 113:'''
<blockquote>
3 Vom '''Aufgang der Sonne''' bis zu ihrem '''Untergang''' sei gelobt der Name des HERRN.<br/>
4 Erhaben ist der HERR über alle Völker, über den '''Himmeln''' ist seine Herrlichkeit.
</blockquote>
'''Psalm 136:'''
<blockquote>
3 Dankt dem Herrn der Herren, denn seine Huld währt ewig!<br/>
4 Ihm, der allein große Wunder tut, denn seine Huld währt ewig,<br/>
5 der den '''Himmel''' gemacht hat in Weisheit, denn seine Huld währt ewig,<br/>
6 der die Erde gefestigt hat über den Wassern, denn seine Huld währt ewig,<br/>
7 der '''die großen Leuchten''' gemacht hat, denn seine Huld währt ewig,<br/>
8 die '''Sonne''' zur Herrschaft über den '''Tag''', denn seine Huld währt ewig,<br/>
9 den '''Mond''' und die '''Sterne''' zur Herrschaft über die '''Nacht''', denn seine Huld währt ewig.
</blockquote>
'''Psalm 147:'''
<blockquote>
4 Er bestimmt die Zahl der '''Sterne''' und ruft sie alle mit Namen.
</blockquote>
'''Psalm 148:'''
<blockquote>
'''Lobpreis auf den Herrn, den König des Kosmos'''<br/>
1 Halleluja! Lobt den HERRN vom '''Himmel''' her, lobt ihn in den Höhen:<br/>
2 Lobt ihn, all seine Engel, lobt ihn, all seine Heerscharen,<br/>
3 lobt ihn, '''Sonne''' und '''Mond''', lobt ihn, all ihr leuchtenden '''Sterne''',<br/>
4 lobt ihn, ihr '''Himmel der Himmel''', ihr Wasser über dem '''Himmel'''!
</blockquote>
Mit den "Wassern über dem Himmel" können nicht die Wolken unterhalb der Sternensphäre gemeint sein. Vielmehr dürfte es sich um eine Anspielung auf den Urozean beziehungsweise die Urflut handeln (siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|'''Urozean''']]). Diese Urflut existierte bereits vor der Erschaffung des Lichts und der Gestirne. Man erinnere sich an den Beginn der Schöpfungsgeschichte in den ersten drei Versen der Bibel (siehe oben).
'''Buch der Weisheit (Weisheit Salomos):'''
<blockquote>
'''Salomos Gebet um Weisheit'''<br/>
9,1 Gott der Väter und Herr des Erbarmens, du hast '''das All''' durch dein Wort gemacht.
</blockquote>
'''Jesus Sirach 42:'''
<blockquote>
'''Lob Gottes in der Schöpfung'''<br/>
15 Nun will ich der Werke des Herrn gedenken, und was ich gesehen habe, werde ich erzählen: Durch die Worte des Herrn sind seine Werke und durch seinen Segen gab er ihnen ihre Bestimmung.<br/>
16 Die leuchtende '''Sonne''' blickt auf alles hernieder und von der Herrlichkeit des Herrn ist sein Werk erfüllt.<br/>
17 Der Herr gab es selbst den Heiligen nicht, all seine Wunder zu erzählen, der Herr der Herrscher über '''das All''', hat sie gegründet, sodass '''das All''' in seiner Herrlichkeit Bestand hat.<br/>
18 Abgrund und Herz hat er durchforscht und ihre Absichten hat er durchschaut; denn der Höchste kennt alles Wissen und er blickt auf die '''Zeichen der Zeiten'''.<br/>
19 Er tut das Vergangene und das Kommende kund und enthüllt die Spuren des Verborgenen.<br/>
20 Kein Gedanke entgeht ihm und kein einziges Wort bleibt ihm verborgen.<br/>
21 Die Großtaten seiner Weisheit hat er geordnet; wie er ist '''von Ewigkeit und in Ewigkeit'''. Ihm ist weder etwas hinzugefügt noch weggenommen worden und er hat keines Ratgebers bedurft.
</blockquote>
Auch im nachfolgenden Kapitel lobt Jesus Sirach die Sonne, den Mond und die Sterne in den höchsten Tönen:
'''Jesus Sirach 43:'''
<blockquote>
1 Der Stolz der Höhe ist ein '''Firmament''' von Reinheit, die Gestalt des '''Himmels''' beim Anblick der Herrlichkeit.<br/>
2 Die '''Sonne''' verkündet durch ihr Erscheinen beim Aufgang, ein wunderbares Geschöpf, ein Werk des Höchsten!<br/>
3 Zur '''Mittagszeit''' trocknet sie den Boden aus, wer wird bestehen vor ihrer Glut?<br/>
4 Wer in einen Ofen bläst bei Arbeiten mit Glut - dreimal so stark versengt die '''Sonne''' Berge; sie atmet Feuerdämpfe aus und blendet mit gleißenden Strahlen die Augen.<br/>
5 Groß ist der Herr, der sie gemacht hat, mit seinen Worten beschleunigt er ihren Lauf.<br/>
6 Auch der '''Mond''' hält sich in allem an seinen Zeitpunkt, zur '''Festsetzung der Zeiten''' und als Zeichen auf Dauer.<br/>
7 Vom '''Mond''' geht das Zeichen für einen Festtag aus, ein Gestirn, das abnimmt bis zur Vollendung.<br/>
8 Der Name '''Monat''' kommt vom '''Neumond''', der wunderbar zunimmt beim Wechsel, ein Geschöpf des Heeres in der Höhe, das am '''Himmelsgewölbe''' leuchtet.<br/>
9 Die Schönheit des '''Himmels''' ist der Glanz der '''Sterne''', ein strahlender Schmuck in den Höhen des Herrn.<br/>
10 Durch die Worte des Heiligen stehen sie gemäß ihrer Bestimmung und sie ermüden nie bei ihrer Wache.<br/>
...<br/>
27 Vieles werden wir sagen, aber wir kommen nie an ein Ziel und das Ende der Worte ist: Er ist '''das All'''.
</blockquote>
'''Jesaja 40:'''
<blockquote>
26 Hebt eure Augen in die Höhe und seht: Wer hat diese '''Gestirne''' erschaffen?<br/>
Der vollzählig herausführt ihr Heer, er ruft sie alle beim Namen.<br/>
Wegen seiner Fülle an Kraft und mächtiger Stärke fehlt kein einziges.
</blockquote>
Das Buch Baruch gehört zu den späten Schriften des Alten Testaments. Im dritten Kapitel werden das Licht und die Sterne in Bezug auf Gott thematisiert:
'''Baruch 3:'''
<blockquote>
33 Er entsendet das '''Licht''' und es eilt dahin; er ruft es zurück und zitternd gehorcht es ihm.<br/>
34 Froh leuchten die '''Sterne''' auf ihren Posten.<br/>
35 Ruft er sie, so antworten sie: Hier sind wir. Sie leuchten mit Freude für ihren Schöpfer.<br/>
36 Das ist unser Gott; kein anderer gilt neben ihm.
</blockquote>
Ein Lobpreis auf die Werke, Engel und Mächte Gottes am Gewölbe des Himmels findet sich im '''Buch Daniel''' im dritten Kapitel. Der Text macht inhaltlich eine ähnliche Aussage wie der Lobpreis auf den Herrn, den König des Kosmos in Psalm 148 (siehe oben):
'''Daniel 3:'''
<blockquote>
56 Gepriesen bist du am Gewölbe des '''Himmels''', gerühmt und verherrlicht in Ewigkeit.<br/>
57 Preist den HERRN, all ihr Werke des HERRN; lobt und rühmt ihn in Ewigkeit!<br/>
58 Preist den HERRN, ihr '''Himmel'''; lobt und rühmt ihn in Ewigkeit!<br/>
59 Preist den HERRN, ihr Engel des HERRN; lobt und rühmt ihn in Ewigkeit!<br/>
60 Preist den HERRN, all ihr '''Wasser über dem Himmel'''; lobt und rühmt ihn in Ewigkeit!<br/>
61 Preist den HERRN, all ihr Mächte des HERRN; lobt und rühmt ihn in Ewigkeit!<br/>
62 Preist den HERRN, '''Sonne und Mond'''; lobt und rühmt ihn in Ewigkeit!<br/>
63 Preist den HERRN, ihr '''Sterne am Himmel'''; lobt und rühmt ihn in Ewigkeit!
</blockquote>
=== Der Himmelsthron ===
Der '''Himmelsthron''' wir in vielen Texten des Alten Testaments als der Sitz Gottes genannt. Hier zunächst einige Erwähnungen in den Psalmen:
<blockquote>
11,4 Der HERR ist in seinem heiligen Tempel, der HERR hat seinen '''Thron im Himmel'''.<br/>
Seine Augen schauen herab, seine Blicke prüfen die Menschen.
</blockquote>
<blockquote>
33,13 Der HERR blickt herab vom '''Himmel''', er sieht alle Menschen.<br/>
33,14 Von seinem '''Thronsitz''' schaut er nieder auf alle Bewohner der Erde.
</blockquote>
<blockquote>
89,37 Sein Haus soll bleiben auf ewig, sein '''Thron''' habe Bestand vor mir wie die '''Sonne''';
</blockquote>
<blockquote>
103,19 Der HERR hat seinen '''Thron''' errichtet im '''Himmel''', seine königliche Macht beherrscht '''das All'''.
</blockquote>
Im Buch der Weisheit stehen die folgenden beiden Verse:
<blockquote>
9,9 Mit dir ist die Weisheit, die deine Werke kennt und die zugegen war, als du die Welt erschufst. Sie weiß, was wohlgefällig ist in deinen Augen und was recht ist nach deinen Geboten.<br/>
9,10 Sende sie vom heiligen '''Himmel''' und schick sie vom '''Thron''' deiner Herrlichkeit, damit sie bei mir sei und alle Mühe mit mir teile und ich erkenne, was wohlgefällig ist bei dir!
</blockquote>
Diese Bild von Gottes Thron im Himmel wir auch im Neuen Testament aufgegriffen, wie beispielsweise beim Evangelisten Matthäus (Kapitel 5, Vers 34) oder in der Offenbarung des Johannes, wo im vierten Kapitel die eröffnende Himmelsvision mit dem Abschnitt über "Die Huldigung vor dem Thron Gottes" beginnt:
<blockquote>
1 Danach sah ich und siehe, eine Tür war geöffnet am '''Himmel'''; und die erste Stimme, die ich gleich einer Posaune mit mir reden gehört hatte, sagte: Komm herauf und ich werde dir zeigen, was dann geschehen muss.<br/>
2 Sogleich wurde ich vom Geist ergriffen. Und siehe, '''ein Thron stand im Himmel'''; auf dem Thron saß einer,<br/>
3 der wie ein Jaspis und ein Karneol aussah. Und über dem '''Thron''' wölbte sich ein Regenbogen, der wie ein Smaragd aussah.<br/>
4 Und rings um den '''Thron standen vierundzwanzig Throne''' und auf den Thronen saßen vierundzwanzig Älteste, in weiße Gewänder gekleidet und mit goldenen Kränzen auf dem Haupt.<br/>
5 Von dem Thron gingen Blitze, Stimmen und Donner aus. Und '''sieben lodernde Fackeln brannten vor dem Thron; das sind die sieben Geister Gottes'''.<br/>
6 Und vor dem Thron war etwas wie ein gläsernes Meer, gleich Kristall. Und in der Mitte des Thrones und rings um den Thron waren '''vier Lebewesen''' voller Augen, vorn und hinten.<br/>
7 Das erste Lebewesen glich einem '''Löwen''', das zweite einem '''Stier''', das dritte sah aus wie ein '''Mensch''', das vierte glich einem '''fliegenden Adler'''.<br/>
</blockquote>
Der achtstrophige Adventshymnus ''Veni redemptor gentium'' (die deutschsprachige Kontrafaktur heißt "Nun komm, der Heiden Heiland") wird dem Kirchenvater Ambrosius von Mailand (339–397) zugeschrieben. In der fünften Strophe wird mit Bezug auf die Himmelfahrt des Messias der Sitz Gottes erwähnt:
<blockquote>
5,1 Egressus eius a Patre,<br/>
5,2 Regressus eius ad Patrem;<br/>
5,3 Excursus usque ad inferos,<br/>
5,4 Recursus ad '''sedem Dei'''.
</blockquote>
<blockquote>
5,1 Sein Ausgang ist vom Vater,<br/>
5,2 Seine Rückkehr ist beim Vater;<br/>
5,3 Hinausgelaufen bis zu den Toten,<br/>
5,4 Zurückgelaufen bis zum '''Sitz Gottes'''.
</blockquote>
Es ist nicht viel Phantasie erforderlich, um den Thron Gottes im '''Himmelsstier''' wiederzuerkennen. Die vierundzwanzig Throne, die sich entlang der '''Ekliptik''' um diesen Thron herum aufreihen, stehen für die vierundzwanzig Stunden eines Tages, und sie sind je zwei für jedes der zwölf Lebewesenkreiszeichen des '''Zodiaks'''. Die als sieben lodernde Fackeln vor dem Thron sind die sieben '''Wandelgestirne''', die als die '''sieben Geister Gottes''' immer wieder durch das '''Goldene Tor der Ekliptik''' in der Sitzfläche des Thrones ziehen. Die '''vier besonderen Lebewesen''' sind die vier Evangelistensymbole bei den vier zoroastrischen '''Königssternen'''.
→ Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|'''Himmelsstier''']].
→ Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Die_Ekliptik|'''Ekliptik''']].
→ Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Zodiak|'''Zodiak''']].
→ Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Das_Goldene_Tor_der_Ekliptik|'''Goldenes Tor der Ekliptik''']].
→ Siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Vier_in_Religionen|'''Bedeutung der Vier in Religionen''']].
→ Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Königssterne|'''Königssterne''']].
<gallery caption="Throne" widths=640 heights=480 perrow=2>
Aachen_Cathedral_Karlsthron_02.jpg|Thron Karls des Großen aus den 790er Jahren im Aachener Dom.
Himmelsthron.Taurus.Aries.png|Himmelsthron in den Sternbildern Stier (Taurus) und Widder (Aries) vor dem Untergang in Richtung Westen.
</gallery>
=== Das Lamm ===
Im ersten Kapitel des Evangeliums nach Johannes wird Jesus von Nazareth explizit als "Lamm Gottes" bezeichnet:<ref>[https://www.bibleserver.com/EU/Johannes1%2C29 Johannes 1,29], bibleserver.com, Einheitsübersetzung (2016)</ref>
<blockquote>
29b Seht, das '''Lamm Gottes''', das die Sünde der Welt hinwegnimmt!<br/>
...<br/>
36b Seht, das '''Lamm Gottes'''!
</blockquote>
Es handelt sich beim „Lamm Gottes“ (Kirchenlatein: „Agnus Dei“) um ein seit ältester Zeit verbreitetes Symbol für Jesus Christus. Es wird auch als das Osterlamm bezeichnet, das am Ostertag, also kurz nach der Tag-und-Nacht-Gleiche im Frühjahr auferstanden ist. Nach dem Evangelisten Markus wurde die Auferstehung „... am ersten Tag der Woche, früh am Morgen, als eben die Sonne aufging“, also am Ostersonntag während der Morgenröte im Osten entdeckt.<ref>[https://www.bibleserver.com/LUT/Markus16%2C2 Markus 16,2], Einheitsübersetzung, 2016</ref> Am 40. Tag ist Jesus Christus nach dem Zeugnis der Evangelisten Markus und Lukas in den Himmel aufgefahren. Zu Beginn der Apostelgeschichte wird dieses Ereignis folgendermaßen beschrieben:<ref>[https://www.bibleserver.com/EU/Apostelgeschichte1 Apostelgeschichte 1], Einheitsübersetzung, 2016</ref>
<blockquote>
7 Er sagte zu ihnen: Euch steht es nicht zu, Zeiten und Fristen zu erfahren, die der Vater in seiner Macht festgesetzt hat.<br/>
8 Aber ihr werdet Kraft empfangen, wenn der Heilige Geist auf euch herabkommen wird; und ihr werdet meine Zeugen sein in Jerusalem und in ganz Judäa und Samarien und bis an die Grenzen der Erde.<br/>
9 Als er das gesagt hatte, wurde er vor ihren Augen emporgehoben und eine Wolke nahm ihn auf und entzog ihn ihren Blicken.<br/>
</blockquote>
Im altrömischen Glaubensbekenntnis gibt es die Textstelle:
<blockquote>
„ascendit in caelis, sedet ad dexteram Patris“
</blockquote>
Zu Deutsch:
<blockquote>
„aufgefahren in den Himmel, er sitzt zur Rechten des Vaters“
</blockquote>
Das '''Lamm''' (astronomisch Widder) befindet sich am nördlichen Sternenhimmel '''zur Rechten''' des Stieres (Taurus). Sowohl der mesopotamische Himmelsstier als auch das altarabische Sternbild Thuraya verbinden diese beiden neuzeitlichen Sternbilder zu einer Einheit. Der Hauptstern im Sternbild Widder (Aries) heißt Hamal, und das arabische Wort "hamal" steht für ein einjähriges Lamm.<ref name="Adams">Danielle Adams: [http://onesky.arizona.edu/arab-star-names/the-lamb/ The Lamb – A folkloric celestial complex], Two Deserts, one Sky – Arab Star Calendars</ref> Der fette Schwanz des Lammes wird durch die '''Plejaden (Siebengestirn)''' markiert.<ref name="Adams" /> Die Augen des Stieres sind die Sterne '''Aldebaran''' und '''Ain'''. Zwischen dem Kopf des Stieres und den '''Plejaden''' befindet sich das '''Goldene Tor der Ekliptik''', durch das alle Wandelgestirne regelmäßig hindurchziehen.
→ Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Bibelstellen|'''Bibelstellen zum Siebengestirn''']].
→ Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Das_Goldene_Tor_der_Ekliptik|'''Goldenes Tor der Ekliptik''']].
Der Frühlingspunkt der Sonne, also deren Ort auf der Ekliptiklinie zur Tag-und-Nacht-Gleiche im Frühjahr, ist von der monotheistischen Schöpfung bis zur Geburt des christlichen Gottessohns vom Kopf des Stiers (bei den Sternen '''Aldebaran''' und '''Ain''' im Goldenen Tor der Ekliptik) im heutigen Sternbild Stier (Taurus) bis zum Kopf des Lammes (beim Stern '''Hamal''') im heutigen Sternbild Widder (Aries) nach Westen gewandert. Heute befindet sich der Frühlingspunkt bereits am westlichen Ende des Sternbilds Fische (Pisces), das sich westlich an das Sternbild Widder anschließt.
==== Offenbarung des Johannes ====
In der Offenbarung des Johannes heißt es im 7. Kapitel:
<blockquote>
10b Die Rettung kommt von unserem '''Gott''', der auf dem '''Thron''' sitzt, und von dem '''Lamm'''.<br/>
17a Denn das Lamm in der Mitte vor dem Thron wird sie weiden und zu den Quellen führen, aus denen das '''Wasser des Lebens''' strömt.
</blockquote>
Wird der '''Thron Gottes''' mit dem Himmelsstier identifiziert (siehe oben), dann sitzt das '''Lamm''' (Aries, Sternbild Widder) westlich und somit rechts vor diesem Thron. Im weiteren Verlauf der Ekliptik nach Westen befinden sich die zusammenhängenden '''Wassersternbilder''' des Urozeans, dem Urquell des Lebens. Es handelt ich um die heutigen Sternbilder Fluss Eridanus, Walfisch (Cetus), Fische (Pisces), Wassermann (Aquarius), Südlicher Fisch (Piscis Austrinus) und Delphin (Delphinus) sowie Steinbock (Capricornus, früher Ziegenfisch).
→ Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|'''Urozean''']].
<gallery caption="Das Lamm zur Rechten des Stieres" mode=packed widths=800 heights=600>
Himmelsstier.P1117152.jpg|Astrophotographie vom Asterismus Himmelsstier
Himmelsstier.Sternbilder.P1117152.png|Beschriftete Astrophotographie vom Himmelsstier am winterlichen Abendhimmel in Richtung südlicher Meridian. Die Ekliptiklinie verläuft horizontal etwas unterhalb der Bildmitte.
Haende.der.Thuraya.Vollmond.Sterne.P1079912.jpg|Astrophotographie der Himmelsregion mit dem beduinischen Sternbild "Hände der Thuraya" (grüne durchgezogene Linien, Ekliptik rot gepunktete Linie) mit arabisch bezeichneten Sternen. Der Vollmond befindet sich zwischen den Sternbildern Taurus, Aries und Cetus.
Urozean.Wassersternbilder.png|Die zusammenhängenden Wassersternbilder des Urozeans am Sternenhimmel: Fluss Eridanus, Walfisch (Cetus), Fische (Pisces), Wassermann (Aquarius), Südlicher Fisch (Piscis Austrinus), Delphin (Delphinus) sowie Ziegenfisch (Steinbock, Capricornus).
</gallery>
Interpretiert man das Sternbild "Lamm" (Widder / Aries) als Mittler auf dem ekliptischen Weg vom finsteren kosmischen Urozean im Westen (rechts) zum strahlenden majestätischen Sternbild Stier (Taurus) im Osten (links), ergeben auch andere Bibelstellen in Bezug auf den Sternenhimmel einen tiefen symbolischen Sinn, die in den folgenden Abschnitten aufgeführt sind.
==== Evangelium nach Johannes ====
Die Rede von Jesus an den Jünger Thomas aus dem 14. Kapitel des Evangeliums nach Johannes ist in diesem Zusammenhang interessant:
<blockquote>
6 Jesus sagte zu ihm: Ich bin der Weg und die Wahrheit und das Leben; niemand kommt zum Vater außer durch mich.<br/>
7 Wenn ihr mich erkannt habt, werdet ihr auch meinen Vater erkennen. Schon jetzt kennt ihr ihn und habt ihn gesehen.
</blockquote>
Alle Wandelgestirne bewegen sich entlang der Ekliptiklinie (Weg) durch das heutige Sternbild Widder (das altarabische Sternbild "Lamm") im Westen zum [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Das_Goldene_Tor_der-Ekliptik|Goldenen Tor der Ekliptik]] nach Osten im großen Himmelsstier (Vater / Thron).
==== Evangelium nach Markus ====
Im Evangelium nach Markus heißt es:
<blockquote>
14,62 Jesus sagte: Ich bin es. Und ihr werdet den Menschensohn '''zur Rechten der Macht''' sitzen und mit den Wolken des '''Himmels''' kommen sehen.
</blockquote>
<blockquote>
16,19 Nachdem Jesus, der Herr, dies zu ihnen gesagt hatte, wurde er in den '''Himmel''' aufgenommen und setzte sich '''zur Rechten Gottes'''.
</blockquote>
==== Evangelium nach Lukas ====
Im Evangelium nach Lukas ist es folgendermaßen formuliert:
<blockquote>
22,69 Von nun an wird der Menschensohn '''zur Rechten der Macht Gottes''' sitzen.
</blockquote>
==== Evangelium nach Matthäus ====
Auch im Evangelium nach Matthäus findet sich eine entsprechende Stelle:
<blockquote>
26,64 Jesus antwortete: Du hast es gesagt. Doch ich erkläre euch: Von nun an werdet ihr den Menschensohn '''zur Rechten der Macht''' sitzen und auf den Wolken des '''Himmels''' kommen sehen.
</blockquote>
==== Brief an die Hebräer ====
Im Brief an die Hebräer, dessen Autor unbekannt ist, gibt es etliche entsprechende Stellen:
<blockquote>
'''Gottes Rede in seinem Sohn'''<br/>
1,3 er ist der Abglanz seiner Herrlichkeit und das Abbild seines Wesens; er trägt '''das All''' durch sein machtvolles Wort, hat die Reinigung von den Sünden bewirkt und sich dann '''zur Rechten der Majestät in der Höhe''' gesetzt;<br/>
1,10 Und: Du, Herr, hast vorzeiten der Erde Grund gelegt, die '''Himmel''' sind das Werk deiner Hände.<br/>
1,11 Sie werden vergehen, '''du aber bleibst'''; sie alle veralten wie ein Gewand;<br/>
1,12 du rollst sie zusammen wie einen Mantel und wie ein Gewand werden sie gewechselt. Du aber bleibst, der du bist, und '''deine Jahre enden nie'''.<br/>
1,13 Zu welchem Engel hat er jemals gesagt: Setze dich mir '''zur Rechten''' und ich lege dir deine Feinde als Schemel unter die Füße?
</blockquote>
<blockquote>
'''Die Liturgie des neuen Bundes'''<br/>
8,1 Die Hauptsache bei dem Gesagten aber ist: Wir haben einen solchen Hohepriester, der sich '''zur Rechten des Thrones der Majestät im Himmel''' gesetzt hat,<br/>
8,2 als Diener des Heiligtums und des '''wahren Zeltes''', das der Herr selbst aufgeschlagen hat, nicht ein Mensch.
</blockquote>
<blockquote>
'''Christus als Mittler des neuen Bundes'''<br/>
9,24 Denn Christus ist nicht in ein von Menschenhand gemachtes Heiligtum hineingegangen, in ein Abbild des wirklichen, sondern '''in den Himmel selbst''', um jetzt '''vor Gottes Angesicht''' zu erscheinen für uns;
</blockquote>
<blockquote>
'''Das Opfer Jesu Christi als endgültige Versöhnung mit Gott'''<br/>
10,12 Dieser aber hat nur ein einziges Opfer für die Sünden dargebracht und sich dann '''für immer zur Rechten Gottes''' gesetzt;
</blockquote>
<blockquote>
'''Das Beispiel Jesu Christi'''<br/>
12,2 und dabei auf Jesus blicken, den Urheber und Vollender des Glaubens; er hat angesichts der vor ihm liegenden Freude das Kreuz auf sich genommen, ohne auf die Schande zu achten, und sich '''zur Rechten von Gottes Thron''' gesetzt.
</blockquote>
==== Erster Brief des Petrus ====
Der erste Brief des Petrus zählt zu den katholischen Briefen des Neuen Testaments. Dort heißt es im letzten Satz über Jesus Christus:
<blockquote>
22 der in den '''Himmel''' gegangen ist; dort ist er '''zur Rechten''' Gottes und Engel, Gewalten und Mächte sind ihm unterworfen.
</blockquote>
==== Apostelgeschichte ====
Die Apostelgeschichte schließt an das Evangelium nach Lukas an und wird ebenfalls diesem zugeschrieben. Hier kommen der erste bekennende sowie erste berufene Apostel Petrus und der erste christliche Märtyrer Stephanus zu Wort:
<blockquote>
'''Die Pfingstpredigt des Petrus'''<br/>
2,33 '''Zur Rechten Gottes''' erhöht, hat er vom Vater den verheißenen Heiligen Geist empfangen und ihn ausgegossen, wie ihr seht und hört.
</blockquote>
<blockquote>
'''Steinigung des Stephanus'''<br/>
7,55 Er aber, erfüllt vom Heiligen Geist, blickte zum '''Himmel''' empor, sah die Herrlichkeit Gottes und Jesus '''zur Rechten Gottes''' stehen<br/>
7,56 und rief: Siehe, ich sehe den Himmel offen und den Menschensohn '''zur Rechten Gottes''' stehen.
</blockquote>
=== Gedanken zur wundersamen Brotvermehrung ===
==== Evangelien ====
[[Datei:Face de chapiteau figurant la Multiplication des pains, choeur de l'église de Saint-Nectaire, Puy-de-Dôme.jpg|mini|rechts|hochkant=2|Jesus mit vier seiner Jünger mit fünf Broten und zwei Fischen an einem Säulenkapitell in der romanischen Wallfahrtskirche Saint Nectaire auf dem Mont Cornadore in Saint-Nectaire in Frankreich (Département Puy-de-Dôme in der Region Auvergne-Rhône-Alpes).]]
Die wundersame Speisung der mehreren Tausend mit wenigen Broten und Fischen wird in aller vier Evangelien der Bibel erwähnt. Das Ereignis fand auf einem Berg am Ufer des Sees von Galiläa (auch als "See von Tiberias", "See Genezareth" oder "Galiläisches Meer" bekannt) statt. In der abgelegenen Gegend gab es damals sehr wenig künstliche Lichtquellen, so dass ein ungestörter Anblick des Sternenhimmels möglich war.
===== Evangelium nach Johannes =====
Im sechsten Kapitel des Evangeliums nach '''Johannes''' tauchen bei der Beschreibung der Brotvermehrung durch Jesus zum jüdischen Pessachfest neben einigen weiteren Symbolen mit astronomischer Deutungsmöglichkeit auch die expliziten Zahlen Zwei, Fünf und Zwölf auf:
<blockquote>
9 Hier ist ein kleiner Junge, der hat '''fünf Gerstenbrote''' und '''zwei Fische'''; doch was ist das für so viele?<br/>
10 Jesus sagte: Lasst die Leute sich setzen! Es gab dort nämlich viel Gras. Da setzten sie sich; es waren etwa '''fünftausend''' Männer.<br/>
11 Dann nahm Jesus die '''Brote''', sprach das Dankgebet und teilte an die Leute aus, so viel sie wollten; ebenso machte er es mit den '''Fischen'''.<br/>
12 Als die Menge satt geworden war, sagte er zu seinen Jüngern: Sammelt die übrig gebliebenen Brocken, damit nichts verdirbt!<br/>
13 Sie sammelten und füllten '''zwölf Körbe''' mit den Brocken, die von den '''fünf Gerstenbroten''' nach dem Essen übrig waren.<br/>
...<br/>
31 Unsere Väter haben das '''Manna''' in der Wüste gegessen, wie es in der Schrift heißt: '''Brot vom Himmel''' gab er ihnen zu essen.<br/>
32 Jesus sagte zu ihnen: Amen, amen, ich sage euch: Nicht Mose hat euch das '''Brot vom Himmel''' gegeben, sondern mein Vater gibt euch das wahre '''Brot vom Himmel'''.<br/>
33 Denn das '''Brot''', das Gott gibt, kommt vom '''Himmel''' herab und gibt der Welt das Leben.<br/>
34 Da baten sie ihn: Herr, gib uns immer dieses '''Brot'''!<br/>
35 Jesus antwortete ihnen: Ich bin das '''Brot des Lebens'''; wer zu mir kommt, wird nie mehr hungern, und wer an mich glaubt, wird nie mehr Durst haben.<br/>
...<br/>
48 Ich bin das '''Brot des Lebens'''.<br/>
49 Eure Väter haben in der Wüste das '''Manna''' gegessen und sind gestorben.<br/>
50 So aber ist es mit dem '''Brot''', das vom '''Himmel''' herabkommt: Wenn jemand davon isst, wird er nicht sterben.<br/>
51 Ich bin das '''lebendige Brot''', das vom '''Himmel''' herabgekommen ist. Wer von diesem '''Brot''' isst, wird in Ewigkeit leben. Das '''Brot''', das ich geben werde, ist mein Fleisch für das Leben der Welt.
</blockquote>
===== Evangelium nach Markus =====
Eine ähnliche Schilderung befindet sich im sechsten Kapitel des Evangeliums nach '''Markus''', wo das Ereignis an einem abgelegenen und einsamen Ort stattgefunden hat:
<blockquote>
38 Er sagte zu ihnen: Wie viele '''Brote''' habt ihr? Geht und seht nach! Sie sahen nach und berichteten: '''Fünf Brote''' und außerdem '''zwei Fische'''.<br/>
39 Dann befahl er ihnen, sie sollten sich in Mahlgemeinschaften im grünen Gras lagern.<br/>
40 Und sie ließen sich in Gruppen zu hundert und zu fünfzig nieder.<br/>
41 Darauf nahm er die '''fünf Brote''' und die '''zwei Fische''', blickte zum '''Himmel''' auf, sprach den Lobpreis, brach die '''Brote''' und gab sie den Jüngern, damit sie diese an die Leute austeilten. Auch die '''zwei Fische''' ließ er unter allen verteilen.<br/>
42 Und alle aßen und wurden satt.<br/>
43 Und sie hoben Brocken auf, '''zwölf Körbe''' voll, und Reste von den '''Fischen'''.<br/>
44 Es waren '''fünftausend''' Männer, die von den '''Broten''' gegessen hatten.
</blockquote>
Die Brotvermehrung auch ein weiteres Mal im achten Kapitel des Evangeliums nach '''Markus''' erwähnt:
<blockquote>
5 Er fragte sie: Wie viele '''Brote''' habt ihr? Sie antworteten: '''Sieben'''.<br/>
6 Da forderte er die Leute auf, sich auf den Boden zu setzen. Dann nahm er die sieben '''Brote''', sprach das Dankgebet, brach die '''Brote''' und gab sie seinen Jüngern zum Verteilen; und die Jünger teilten sie an die Leute aus.<br/>
7 Sie hatten auch noch ein paar '''Fische''' bei sich. Jesus segnete sie und ließ auch sie austeilen.<br/>
8 Die Leute aßen und wurden satt. Und sie hoben die Überreste der '''Brotstücke''' auf, '''sieben Körbe''' voll.<br/>
9 Es waren etwa '''viertausend''' Menschen beisammen. Danach schickte er sie nach Hause.<br/>
...<br/>
19 Als ich die '''fünf Brote''' für die '''Fünftausend''' brach, wie viele '''Körbe voll Brotstücke''' habt ihr da aufgehoben? Sie antworteten ihm: '''Zwölf'''.<br/>
20 Und als ich die '''sieben Brote''' für die '''Viertausend''' brach, wie viele '''Körbe''' voll habt ihr da aufgehoben? Sie antworteten: '''Sieben'''.<br/>
21 Da sagte er zu ihnen: Versteht ihr immer noch nicht?
</blockquote>
===== Evangelium nach Lukas =====
Ebenso verhält es sich im neunten Kapitel des Evangeliums nach '''Lukas''', wo das Ereignis dem Ort Betsaida (zu Deutsch: „Haus des Fisches“) am See Genezareth zugeordnet ist:
<blockquote>
12 Als der Tag zur Neige ging, kamen '''die Zwölf''' und sagten zu ihm: Schick die Leute weg, damit sie in die umliegenden Dörfer und Gehöfte gehen, dort Unterkunft finden und etwas zu essen bekommen; denn wir sind hier an einem abgelegenen Ort.<br/>
13 Er antwortete ihnen: Gebt ihr ihnen zu essen! Sie sagten: Wir haben nicht mehr als '''fünf Brote''' und '''zwei Fische'''; wir müssten erst weggehen und für dieses ganze Volk etwas zu essen kaufen.<br/>
14 Es waren nämlich etwa '''fünftausend''' Männer. Er aber sagte zu seinen Jüngern: Lasst sie sich in Gruppen zu ungefähr fünfzig lagern!<br/>
15 Die Jünger taten so und veranlassten, dass sich alle lagerten.<br/>
16 Jesus aber nahm die '''fünf Brote''' und die '''zwei Fische''', blickte zum '''Himmel''' auf, sprach den Lobpreis und brach sie; dann gab er sie den Jüngern, damit sie diese an die Leute austeilten.<br/>
17 Und alle aßen und wurden satt. Als man die übrig gebliebenen Brotstücke einsammelte, waren es '''zwölf Körbe''' voll.
</blockquote>
===== Evangelium nach Matthäus =====
Auch im vierzehnten Kapitel des Evangeliums nach '''Matthäus''' ist von einem abgelegenen Ort in einer einsamen Gegend die Rede:
<blockquote>
17 Sie sagten zu ihm: Wir haben nur '''fünf Brote''' und '''zwei Fische''' hier.<br/>
18 Er antwortete: Bringt sie mir her!<br/>
19 Dann ordnete er an, die Leute sollten sich ins Gras setzen. Und er nahm die '''fünf Brote''' und die '''zwei Fische''', blickte zum '''Himmel''' auf, sprach den Lobpreis, brach die Brote und gab sie den Jüngern; die Jünger aber gaben sie den Leuten<br/>
20 und alle aßen und wurden satt. Und sie sammelten die übrig gebliebenen Brotstücke ein, '''zwölf Körbe''' voll.<br/>
21 Es waren etwa '''fünftausend''' Männer, die gegessen hatten, dazu noch Frauen und Kinder.
</blockquote>
Etwas abgewandelt taucht die Brotvermehrung mit '''sieben Körben''' auch im fünfzehnten Kapitel des Evangeliums nach '''Matthäus''' auf:
<blockquote>
34 Jesus sagte zu ihnen: Wie viele '''Brote''' habt ihr? Sie antworteten: '''Sieben''' - und ein paar '''Fische'''.<br/>
35 Da forderte er die Leute auf, sich auf den Boden zu setzen.<br/>
36 Und er nahm die '''sieben Brote''' und die '''Fische''', sprach das Dankgebet, brach sie und gab sie den Jüngern und die Jünger gaben sie den Menschen.<br/>
37 Und alle aßen und wurden satt. Und sie sammelten die übrig gebliebenen Stücke ein, '''sieben Körbe''' voll.<br/>
38 Es waren '''viertausend''' Männer, die gegessen hatten, dazu noch Frauen und Kinder.<br/>
39 Danach schickte er die Menge nach Hause, stieg ins Boot und fuhr in die Gegend von Magadan.
</blockquote>
Der Ort Magadan ist möglicherweise mit dem heutigen Ort Migdal (aramäisch: Magdala) am westlichen Ufer des Sees Genezareth gleichzusetzen.
==== Astronomische Bezüge ====
[[Datei:Sternenhimmel.Pessach.25.3.23.png|mini|rechts|hochkant=2|Sternenhimmel am jüdischen Pessachfest im Jahr 25 nach Christus. Der Vollmond stand hoch über dem Horizont im Süden im Herbstpunkt beim Stern Spica (= "Kornähre") im Sternbild Jungfrau (Virgo). Gleichzeitig befand sich die Sonne tief unter dem Horizont im Norden in der Nähe des Frühlingspunktes im Sternbild Fische (Pisces).]]
[[Datei:Dendera.09.Jungfrau.Loewe.jpg|mini|rechts|hochkant=2|Das Sternbild Jungfrau (links) mit der Kornähre in der Hand und das Sternbild Löwe (rechts) im ägyptischen Zodiak von Dendera aus der Zeit kurz vor Christi Geburt.]]
[[Datei:Dendera.03.Fische.Wassermann.jpg|mini|rechts|hochkant=2|Das Sternbild Fische (links) und das Sternbild Wassermann (rechts unten) im ägyptischen Zodiak von Dendera aus der Zeit kurz vor Christi Geburt.]]
Zu diesen Bibelstellen sind im Folgenden einige Hinweise mit astronomischen Bezügen aufgeführt. Die [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Beobachtungen_in_der_Nähe_der_Ekliptik|Bezugspunkte]] liegen hierbei in der Nähe der [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Die_Ekliptik|Ekliptik]]:
* In den Versen im Evangelium nach Johannes ist mehrfach vom '''Brot, das vom Himmel herabkommt''' die Rede.
* Das zur Herstellung von Brot erforderliche Getreide kann durch eine '''Kornähre''' symbolisiert werden. Am Sternenhimmel wird die Kornähre durch den hellen, ekliptiknahen Stern '''Spica''' (α Virginis) im Sternbild '''Jungfrau''' (Virgo) repräsentiert. Der Vollmond stand zum jüdischen Pessachfest beim Stern Spica.
* Alle Pflanzen benötigen für das Gedeihen '''Wasser'''. Das '''Wasser''' wird am Himmel durch die drei Wassersternbilder der Ekliptik '''Fische''' (Pisces), '''Wassermann''' (Aquarius), und '''Ziegenfisch''' (Steinbock, Capricornus) westlich des [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Frühlingspunkt|Frühlingspunktes]] repräsentiert. Diese Sternbilder bilden mit einigen weiteren angrenzenden Wassersternbildern den [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|Urozean am Himmel]] (siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Trichter_der_Thuraya|Der Trichter der Thuraya]]). Die Wassersternbilder waren zum Pessachfest in den drei Monaten unmittelbar zuvor von der Sonne durchlaufen worden und befanden sich beim Sonnenuntergang deshalb bereits unterhalb des westlichen Horizonts.
* Das Sternbild '''Fische''' (Pisces) besteht seit der Antike aus '''zwei Fischen'''.
* Zu Lebzeiten von Jesus von Nazareth war der '''Frühlingspunkt''' vom Sternbild Widder (Aries, ursprünglich das Hinterteil des großen Sternbilds [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|Himmelsstier (Taurus caeli)]]) in das Sternbild '''Fische''' (Pisces) gewandert. Inzwischen ist er innerhalb dieses Sternbilds noch weiter nach Westen gewandert. Die Sonne und der Neumond standen zu Beginn des jüdischen Monats Nisan, also dem Monat des jüdischen Pessachfestes, im Sternbild '''Fische'''. Der erste Monat des Jahres Nisan hieß bereits in der mesopotamischen Tradition, als sich der Frühlingspunkt noch im Sternbild Widder (Aries) befand, auf Akkadisch "nisannu" (siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Schaltregeln|Plejaden-Schaltregeln]]). In der alten jüdischen Tradition war der Nisan deswegen mit dem Sternbild Widder verbunden. Ferner wurde der Widder dem israelitischen Stamm Juda zugeordnet.
* Zu Lebzeiten von Jesus von Nazareth war der '''Herbstpunkt''' vom Sternbild Waage (Libra, ursprünglich die Scheren des großen Sternbilds [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsskorpion|Himmelsskorpion (Scorpio caeli)]]) in das Sternbild Jungfrau (Virgo) gewandert. Inzwischen ist er innerhalb dieses Sternbilds noch weiter nach Westen gewandert. Um 285 nach Christi erreichte der '''Herbstpunkt''' dann die ekliptikale Länge des Sterns '''Spica''' (α Virginis).
* Die '''fünf Brote''' können mit den fünf mit bloßem Auge sichtbaren Wandelgestirnen (Planeten) '''Merkur''', '''Venus''', '''Mars''', '''Jupiter '''und '''Saturn''' gleichgesetzt werden.<br/>'''''Anmerkung''': In der Bibel wird in der Regel nicht zwischen Fixsternen und Planeten unterschieden. Für eine Ausnahme siehe 2. Buch der Könige, Kapitel 23, Vers 5 aus dem siebenten vorchristlichen Jahrhundert, wo in der Einheitsübersetzung explizit von "den Wandelsternen" und in der Luther-Bibel von "den Planeten" die Rede ist.<ref>[https://www.bibleserver.com/EU/2.K%C3%B6nige23%2C5 2. Buch der Könige, Kapitel 23, Vers 5], bibleserver.com, Einheitsübersetzung 2016</ref> Die Vulgata schreibt hier allerdings von den "duodecim signis" (zu Deutsch: "zwölf Zeichen"), womit die zwölf Sternzeichen der Ekliptik gemeint sind, durch die die sieben Wandelgestirne ziehen. Die Septuaginta spricht noch allgemeiner von den "μαζουρωθ" ("mazuroth") nach dem Hebräischen Wort "מַזָּלָה" ("mazzaroth"), womit allgemein eher Sternkonstellationen und nur im engeren Sinne die Sternzeichen des Zodiaks gemeint sind.''
* Die '''zwei Fische''' können mit den beiden flächenhaft wahrnehmbaren Wandelgestirnen '''Sonne''' und '''Mond '''gleichgesetzt werden.
* Die Summe der '''fünf Brote''' und der '''zwei Fische''' respektive die '''sieben Brote''' (oder die '''sieben Körbe''') entsprechen der Anzahl der freiäugig sichtbaren '''sieben Wandelgestirne''', die sich entlang der Ekliptiklinie stetig gegenüber dem Fixsternhimmel bewegen. Siehe hierzu auch:
** [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Beobachtungen_in_der_Nähe_der_Ekliptik|Beobachtungen in der Nähe der Ekliptik]]
** [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Zusammenhang_mit_dem_Stier|Zu den Etyma und den Kognaten von "Sieben", "Stier", "Gestirn" und "Stern"]]
* Die ausgeteilten '''Brote''' und '''Fische''' durchmaßen die gesamte versammelte Menschenmenge, die durch den vollständigen [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Zodiak|Lebewesenkreis (Zodiak)]] mit den '''zwölf Lebewesenkreiszeichen''' beziehungsweise durch die '''zwölf Körbe''' symbolisiert wird. Der Planet Jupiter, der den Zodiak in zwölf Jahren einmal durchläuft, wurde in Babylonien mit dem babylonischen Hauptgott Marduk gleichgesetzt.
* Insgesamt gibt es am Fixsternhimmel gut 2800 Sterne bis zur scheinbaren Helligkeit 5,5<sup>m</sup> und knapp 8800 Sterne bis zur scheinbaren Helligkeit 6,5<sup>m</sup>, die ohne Lichtverschmutzung mit bloßem Auge als einzelne Lichtpunkte gesehen werden können. Diese verteilen sich allerdings in der gesamten Himmelssphäre, so dass von einem Punkt auf der Erdoberfläche aus zu jedem Zeitpunkt immer nur ungefähr die Hälfte davon über dem Horizont steht. An den beiden Polen sind stets nur die Sterne der jeweiligen nördlichen oder südlichen Hemisphäre zu sehen, und am Äquator können im Laufe eines Jahres alle Sterne gesehen werden. Je nach Breitengrad und Zeitpunkt können bei Neumond (kein Streulicht) innerhalb einer wolkenlosen Nacht viertausend bis zu fast siebentausend Sterne beobachtet werden.<ref>Bob King: [https://skyandtelescope.org/astronomy-blogs/how-many-stars-night-sky-09172014/ 9,096 Stars in the Sky—Is that all? How many stars in the sky can you see?], skyandtelescope.org - The essential Guide to Astronomy, 17. September 2014</ref> Diese Spanne entspricht der Angabe der bei der Brotvermehrung versammelten Menschen, deren Anzahl in den Evangelien mit '''viertausend''' beziehungsweise '''fünftausend''' angegeben ist.
** Im ersten Buch des Alten Testaments ('''Genesis''') wird Abram aus Ur in Mesopotamien bereits das Folgende prophezeit:
<blockquote>
15,5 ''Sieh doch zum Himmel hinauf und zähl die Sterne, wenn du sie zählen kannst! Und er sprach zu ihm: So zahlreich werden deine Nachkommen sein''<br/>
...<br/>
17,5 ''Man wird dich nicht mehr Abram nennen. Abraham, Vater der Menge, wird dein Name sein; denn zum Stammvater einer Menge von Völkern habe ich dich bestimmt.''
</blockquote>
* Die Gruppen von (ungefähr) '''fünfzig''' oder '''hundert Männern''' entsprechen den Sternbildern, die über den gesamten Himmel verteilt sind. Nach der Festlegung der Internationalen Astronomischen Union (IAU) von 1930 gibt es heute 88 Sternbilder, die den Himmel vollständig abdecken. Mit den maximal fast 8800 freiäugig sichtbaren Sternen entspricht dies im Mittel also 100 Sternen pro Sternbild. Bei 4400 freiäugig sichtbaren Sternen wären es 50 Sterne pro Sternbild. Dies entspricht genau der Spanne der Gruppenstärke, die im Neuen Testament angegeben sind.
* Das '''Brot''' und der '''Wein''' werden nach der christlichen Lehre bei der Transsubstantiation in den Leib und das Blut des vom '''Himmel''' herabgekommenen "Brot des Lebens" (vergleiche die Rede über das Himmelsbrot von Jesus in der Synagoge von Kafarnaum in Evangelium nach Johannes 6,48–58) gewandelt, das die kosmische Ewigkeit verheißt.
Die Zahlen '''Zwei''', '''Fünf''', '''Sieben''' und '''Zwölf''' stehen in einem einfachen arithmetischen Zusammenhang, bei dem die beiden jeweils vorhergehenden Zahlen der Folge addiert werden:
{| class="wikitable"
|+
|'''Zahl'''
|'''Summe'''
|'''Anmerkung'''
|-
|'''2'''
|
|Anzahl der freiäugig als '''flächenhaft wahrnehmbaren Wandelgestirne''' ('''Sonne''' und '''Mond'''), siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Zwei|Zur Zwei]]
|-
|'''5'''
|
|Anzahl der freiäugig als '''punktförmig wahrnehmbaren Wandelgestirne''' '''Merkur''', '''Venus''', '''Mars''', '''Jupiter''', '''Saturn'''
|-
|'''7'''
|= 2 + 5
|Anzahl der freiäugig wahrnehmbaren '''Wandelgestirne''' sowie der '''Tage in der Woche''', siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Sieben|Zur Sieben]]
|-
|'''12'''
|= 5 + 7
|Anzahl der '''Monate im Jahr''', der '''Lebewesenkreiszeichen des Zodiaks''' sowie der '''Erdenjahre pro Jupiterjahr''', siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Zwölf|Zur Zwölf]], vergleiche hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Zodiak|Der Zodiak]]
|-
|'''19'''
|= 7 + 12
|Anzahl der '''Jahre''' mit '''zwölf Monaten''' und '''sieben Schaltmonaten''' einer '''Meton-Periode''', siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Neunzehn|Zur Neunzehn]], vergleiche hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Schaltregeln|Die Plejaden-Schaltregeln]] und [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Mondzyklen#Der_Meton-Zyklus|Der Meton-Zyklus]]
|}
=== Weitere Bezüge ===
Weitere Bezüge von der Astronomie zur Theologie ergeben sich bei den folgenden Sachverhalten:
→ Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Biblische_Erwähnungen|'''biblische Erwähnungen von Konstellationen''']].
→ Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Der_Stern_von_Bethlehem|'''Der Stern von Bethlehem''']].
→ Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Ochs_und_Esel|'''Ochs und Esel / Krippe / „Ich bin das Alpha und das Omega“''']].
→ Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Biblische_Bezüge|'''Biblische Bezüge zu den Mondhäusern / Mondstationen''']].
== Zur Kosmologie ==
[[Datei:Kosmologisches.Modell.Schwarze.Schale.Rotverschiebung.png|mini|rechts|hochkant=2.5|Ein kosmologisches Modell unseres im Zentrum isotropen und inhomogenen Universums, das von einer undurchsichtigen und massereichen schwarzen Kugelschale umgeben ist. Von der äußeren Region aus betrachtet, ist unser Universum ein gigantisches Schwarzes Loch. Zwischen dem inneren und dem äußeren Bereich der schwarzen Kugelschale ist kein Informationsaustausch möglich. Jegliche Materie, die von innen oder außen in die schwarze Kugelschale gelangt, ist von innen und von außen nicht mehr sichtbar. Sowohl die innere als auch die äußere Grenze der schwarzen Kugelschale stellen demzufolge einen Ereignishorizont dar.]]
Die '''Kosmologie''' beschäftigt sich mit der Struktur, dem Ursprung und der Entwicklung des Universums. Dadurch ergeben sich zahlreiche Bezüge zur beobachtenden '''Astronomie''' und zur '''Astrophysik''', aber auch zur '''Quantenphysik'''.
In der Antike gingen die Menschen noch davon aus, dass sich die Erde im Mittelpunkt der Welt und somit auch in der Mitte des sichtbaren Universums befindet. Dieses geozentrische Weltbild wurde seit dem 16. Jahrhundert, ausgelöst durch die kopernikanische Wende, zunehmend verworfen und durch ein heliozentrisches Weltbild ersetzt. Durch die Erfindung und Verwendung von Fernrohren konnten seit dem Beginn des 17. Jahrhunderts immer mehr Details im Sternenhimmel entdeckt werden. Durch astronomische Beobachtungen ergaben sich immer mehr Indizien für die Tatsache, dass die Erde einmal pro Jahr auf einer Ellipsenbahn die Sonne umrundet und nicht die Sonne die Erde umkreist. Der Philosoph Immanuel Kant (1724–1804) erkannte bereits 1755 in seiner Allgemeinen Naturgeschichte und Theorie des Himmels das innere Wesen unserer Milchstraße. Mit der ersten zuverlässigen Messung der Parallaxe von unserer Erde zum benachbarten Fixstern 61 Cygni ("Bessel's Stern") durch Friedrich Wilhelm Bessel (1784–1846) in Königsberg und der daraus folgenden Berechnung von dessen Entfernung von gut zehn Lichtjahren im Jahr 1838 war die Tatsache, dass die Erde um die Sonne läuft, endgültig bewiesen.
Die Auswertung der astronomischen Beobachtungen hat zu der heute allgemein geteilten Auffassung geführt, dass unser Universum bei einem Urknall entstanden ist und seitdem expandiert. Die Berücksichtigung des Äquivalenzprinzips zwischen schwerer und träger Masse, das zu der von '''Albert Einstein''' (1879–1955) formulierten Allgemeinen Relativitätstheorie führt, brachte '''Alexander Friedmann''' (1888–1925) 1922 zu der theoretischen Vorhersage eines dynamischen Universums. Fünf Jahre später schlussfolgerte der belgische Astronom '''Georges Lemaître''' (1894–1966) aus den von '''Vesto Slipher''' (1875–1969) beobachteten Rotverschiebungen von fernen Galaxien und den von '''Edwin Hubble''' (1889–1953) ermittelten Entfernungen dieser Galaxien, dass das Universum expandiert. Aufgrund dieser Erkenntnis ergibt sich, dass das Universum einen Ursprung mit sehr kleinem Radius gehabt haben muss. Diesen Zustand nannte er "primordiales Atom" beziehungsweise "Uratom". In der Folgezeit etablierte sich für diesen initialen Vorgang der Begriff "'''Urknall'''" (im Englischen: "'''Big Bang'''").<ref>Markus Bautsch: ''[https://en.wikibooks.org/wiki/Moving_objects_in_retarded_gravitational_potentials_of_an_expanding_spherical_shell/Brief_historical_review Moving objects in retarded gravitational potentials of an expanding spherical shell / Brief historical review], Wikibook (englisch), 2024, abgerufen am 28. Februar 2026</ref>
Viele Astrophysiker versuchen heute mit dem sogenannten '''Standardmodell der Kosmologie''' (auch '''ΛCDM-Modell''' beziehungsweise Lambda-CDM-Modell, wobei "CDM" für "cold dark matter" steht, also für "kalte, dunkle Materie") die Entwicklung des Universums nachzubilden. Hierfür wenden sie das kosmologische Prinzip an, das von zwei grundlegenden Annahmen ausgeht:<ref>Markus Bautsch: ''[https://en.wikibooks.org/wiki/Moving_objects_in_retarded_gravitational_potentials_of_an_expanding_spherical_shell/Preface Moving objects in retarded gravitational potentials of an expanding spherical shell / Preface], Wikibook (englisch), 2024, abgerufen am 28. Februar 2026</ref>
# Das Weltall sei '''homogen''', was bedeutet, dass es in groben Zügen von jedem Punkt aus gleich aussieht.
# Das Weltall sei '''isotrop''', was besagt, dass es in groben Zügen in jede Richtung gleich aussieht.
Mit diesen Annahmen kann das Modell berechnet werden, und mit diversen zusätzlichen Annahmen stimmt es in vielerlei Hinsicht mit den astronomischen Beobachtungen überein. Zu den zusätzlichen Annahmen gehören die folgenden beiden hypothetischen Größen:
* '''Kalte, dunkle Materie''', die zwar der Gravitation unterläge, aber keine Wechselwirkung mit elektromagnetischer Strahlung zeigt.
* Eine '''kosmologische Konstante''' Λ, die eine '''dunkle Energie''' beschreibt und für die beschleunigte Expansion des Universums verantwortlich sei.
Weder für die Homogenität noch für die Isotropie des Kosmos konnten bislang Belege gefunden werden, und auch für die kalte dunkle Materie und die dunkle Energie konnte bislang keine physikalische Interpretation geliefert werden.
Ferner ist auch die Annahme, dass die Naturkonstanten unveränderliche Werte haben, nicht begründbar. Auf kosmischen Zeitskalen kann es durchaus Änderungen geben, die wir derzeit nicht messen können. Die gilt insbesondere für die Hubble-Konstante, die die Expansionsrate des Universums beschreibt, für die Gravitationskonstante, die die Anziehung zweier Massen beschreibt, oder für die kosmologische Konstante, die die beschleunigte Expansion des Universums beschreibt. In diesem Kontext sei darauf hingewiesen, dass unser Universum genauso groß ist wie ein Schwarzes Loch mit der Masse unseres Universums. Deshalb gehen einige Kosmologen davon aus, dass wir innerhalb eines Schwarzen Loches der Größe und Masse unseres Universums leben könnten.
Siehe hierzu auch: [[:en:Moving_objects_in_retarded_gravitational_potentials_of_an_expanding_spherical_shell|'''Moving objects in retarded gravitational potentials of an expanding spherical shell''']].
Darüber hinaus mehren sich Anzeichen und Hinweise, die gegen die Ergebnisse des Standardmodells der Kosmologie sprechen, beziehungsweise durch weitere Hypothesen, die physikalisch nicht begründet werden können, im Standardmodell berücksichtigt werden müssen. Die folgende unvollständige Liste soll hierzu einige Anhaltspunkte liefern:
* Präzise astronomische Beobachtungen zeigen, dass das Weltall auch auf großen Längenskalen '''nicht homogen''' ist, sondern Strukturen zeigt.
* Präzise astronomische Beobachtungen zeigen, dass das Weltall auch auf großen Längenskalen '''nicht isotrop''' ist (Asymmetrie der kosmischen Hintergrundstrahlung).
* Die Hubble-Konstante hat heute einen anderen Wert als früher ("'''Hubble tension'''"), was mit dem Standardmodell nicht im Einklang steht.
* Das beobachtete Vorkommen des dritten Elements im Periodensystem, also des Alkalimetalls '''Lithium''', ist mindestens dreimal geringer als vom Standardmodell vorhergesagt.
* Die '''Rotverschiebung von fernen Galaxien''' ist deutlich größer als es nach dem Standardmodell möglich wäre.
* Die beobachteten '''Rotationskurven von Spiralgalaxien''' stehen im Widerspruch zu den Ergebnissen des Standardmodells.
* Das Standardmodell ist nicht in der Lage, die Abwesenheit von '''Antimaterie''' im sichtbaren Teil des Universums zu erklären.
* Die im frühen Universum beobachteten '''primordialen Schwarzen Löcher und Galaxien''' mit explodierende '''Supernovae''' sowie dem Vorkommen von '''Sauerstoff''' stehen im Widerspruch zu den Ergebnissen des Standardmodells.
== Zur Astrologie ==
Eine Sonderstellung nimmt die '''{{w|Astrologie}}''' (zusammengesetzt mit dem altgriechischen ἄστρον ("astron"), zu Deutsch „Sternenlehre“) ein. Sie ist ein weiteres Beispiel für eine Disziplin, bei der grundlegende Kenntnisse über die Astronomie eine Voraussetzung sind. Sie versucht, Zusammenhänge zwischen den Konstellationen der Wandelgestirne oder astronomischen Ereignissen am Sternenhimmel mit irdischen Geschehnissen oder Veränderungen herzustellen, insbesondere was bestimmte Konjunktionen und daraus abgeleitete Prophezeiungen betrifft. Sie wurde bereits in Mesopotamien und in anderen alten Kulturkreisen von Astronomen ausgeübt. Noch der Astronom '''{{w|Johannes Kepler}}''' (1571–1630) hat als einer der letzten Astronomen einen wesentlichen Teil seiner Einkünfte durch die Erstellung von Horoskopen bestritten. Aber schon Aristoteles hatte festgestellt und beschrieben, dass die bei bestimmten Konstellationen am Himmel vorhergesagten Ereignisse nicht eingetreten waren.
Vor der Aufklärung haben astrologische Prophezeiungen noch eine große und weitreichende gesellschaftliche Bedeutung gehabt. Als Beispiel seien die Behauptungen des ersten im Kurfürstentum Brandenburg tätigen Astrologen '''{{w|Johannes Carion}}''' (1499–1537) genannt, der für 1524 eine Sintflut vorhersagte, die nicht eingetroffen ist.<ref>{{Literatur |Autor=Markus Bautsch, Friedhelm Pedde |Titel=Vor 500 Jahren: Die Sintflut von 1524 die nicht stattfand |Online=https://wfs.berlin/wp-content/uploads/2024/05/A19-BROplanetA4_40s-feb2024ff_www-rz.pdf |Sammelwerk=Dem Himmel nahe. |WerkErg=Mitteilungen der Wilhelm-Foerster-Sternwarte e.V.|Nummer=19 |Hrsg=Wilhelm-Foerster-Sternwarte e.V. / Zeiss-Planetarium am Insulaner |Ort=Berlin |Datum=2024-02 |Seiten=16–19 |Sprache=de |Abruf=2025-08-03|ISSN=2940-9330}}</ref> Der Wiener Hofastronom '''{{w|Georg Tannstetter}}''' (1482–1535) sah sich 1523 bemüßigt, die schon lange im Voraus erhitzten und besorgten Gemüter zu beruhigen:<ref>Georg Tannstetter: ''Libellus consolatorius contra opiniones de diluvio et aliis horrendis periculis anni 1523''</ref>
<blockquote>
Nun hat sich überall, in allen Köpfen, in allen Seelen das Gerücht eingeschlichen:<br/>
die Gelehrten und Weisen sind in ständigem Streitgespräch, andere hingegen sind derart verstört, dass sie ihren Geschäften nicht mehr nachgehen können; sie verkaufen ihre Anwesen, ihre Felder und Besitztümer oder lassen davon ab, Güter zu kaufen, in der Hoffnung, ihr Geld leichter in die sicheren Berge transportieren zu können. Andere wiederum verschieben ihr Heiratsversprechen, kündigen ohne scheinbaren Grund Verträge auf, entziehen sich ihren christlichen Gelübden, arbeiten faul und missmutig auf dem Land und fragen sich, was es denn nütze, Geld und Gut anzuhäufen, wenn doch in kürzester Zeit niemand mehr davon Nutzen ziehen könne.
</blockquote>
'''→ Siehe auch:'''
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Definition|'''Konjunktionen''', Abschnitt '''Definition''']].
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Historische_Konjunktionen|'''Historische Konjunktionen''']].
* [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Beobachtungen_in_der_Nähe_der_Ekliptik|'''Beobachtungen in der Nähe der Ekliptik''']].
<div style="clear:both"></div>
== Einzelnachweise ==
<references></references>
183836rjkyplel1sh2g3cqvlnvwb4gk
Personalisiertes Kochen mit dem Chatbot
0
122425
1088536
1088506
2026-07-01T19:26:49Z
Stilfehler
1981
/* 7. Grenzen und Fallstricke */ Gliederung
1088536
wikitext
text/x-wiki
[[File:Dish based on an AI-generated cooking recipe 04.jpg|thumb|Ein auf einem KI-generierten Rezept basierendes 1-Pfannen-Gericht: Marinierter Lachs und Edamame auf Blumenkohlreis, mit Pistazien und krossem Speck (Würzung: eklektisch südostasiatisch)]]
'''Personalisiertes Kochen mit dem Chatbot''' – Ein Leitfaden für den KI-gestützten Küchenalltag
Was wäre, wenn jemand, der deinen Kühlschrank kennt und deinen Geschmack versteht, dir täglich Anregungen und maßgeschneiderte Rezepte für das geben könnte, was heute auf den Tisch kommt, und dabei mit der Zeit immer besser wird?
== 1. Der personalisierte Küchenassistent ==
<div style="background:powderblue";>
Kochbücher und Rezeptportale bieten eine schier unerschöpfliche Auswahl an Gerichten — aber sie wissen nicht, was im Kühlschrank, im Vorratsschrank und im Gewürzregal steht, sie kennen weder die Geschmackspräferenzen noch die Küchengeräte des Benutzers, und sie können nicht auf die Frage antworten, was man mit einer angebrochenen Dose Kichererbsen, einem Rest Joghurt und einem Bund Petersilie anfangen soll, der morgen nicht mehr frisch sein wird. Genau hier setzt dieser Leitfaden an.
Bei dem hier beschriebenen Ansatz wird der KI-Chatbot nicht als Nachschlagewerk benutzt, sondern als personalisierter Küchenassistent: einer, der das Vorratsregime des Benutzers kennt, mit seinen Abneigungen und Vorlieben vertraut ist, seine Küchenausstattung berücksichtigt, der weiß, wie groß die Portionen sein müssen, und — nach einer Einlernphase — zunehmend treffsichere Vorschläge macht, die tatsächlich zum Benutzer passen. Das Prinzip ist dasselbe, das Musik- und Filmstreamingdienste nutzen, um ihren Nutzern Empfehlungen zu machen: Extrapolation aus erkennbar gewordenen Vorlieben. Der Unterschied ist, dass der Benutzer hier nicht das Ziel einer Marketingstrategie ist — sondern selbst der Nutznießer.
Darüber hinaus sorgt die KI auch noch dafür, dass – bevor Zutaten neu gekauft werden müssen – erst einmal das voll ausgeschöpft wird, was an Vorräten und Resten in einer Küche bereits vorhanden ist.
</div>
=== Was diese Methode vom konventionellen Kochen unterscheidet ===
Die meisten Menschen kochen den Großteil ihrer Mahlzeiten ohne Rezept — aus einem festen Repertoire vertrauter Gerichte, das sich über Jahre kaum verändert. Kochbücher werden gelegentlich aufgeschlagen, meist für besondere Anlässe oder wenn der Wunsch nach etwas Neuem stark genug ist, um die Hürde des Unbekannten zu überwinden. Im Alltag dominiert das Vertraute.
KI-gestütztes Kochen, so wie es dieser Leitfaden beschreibt, macht das Neue zur täglichen Normalität. Weil die KI das vorhandene Inventar kennt und aus ihm schöpft, ist der Aufwand für ein unbekanntes Gericht nicht größer als für ein vertrautes — die Hürde entfällt. Das erlaubt es, buchstäblich jeden Tag etwas zu kochen, das man so noch nie zubereitet hat.
=== Einige Vorteile der Methode ===
[[Datei:Rainbow chard for sale at the Campbell farmers market.jpg|thumb|Einfach mal spontan 1 Zutat kaufen, die interessant aussieht. Die KI wird ein Rezept finden, deren übrige Zutaten alle aus den vorhandenen Beständen (Kühlschrank, Vorratsschrank) kommen.]]
Ökonomisch:
* Vorräte werden systematisch und vollständig genutzt
* Professionelle Problemlösungen bei logistischen Engpässen
* Weniger und effizientere Einkaufsgänge
* Personalisierung der Mengen: die KI berücksichtigt nicht nur die Zahl der Portionen, sondern kann auch damit umgehen, wenn die Portionen größer oder kleiner sein sollen als der Kochbuch-Standard
* Wenn von Zutaten Reste bleiben, werden diese systematisch und vollständig weitergenutzt
Kulinarisch:
* Nur noch Gerichte, die für das eigene Geschmacksprofil optimiert sind
* Tägliche Abwechslung ohne zusätzlichen Aufwand
* Treffsichere Vorschläge neuer Zutaten und Küchen, die zum eigenen Profil passen
* Mehr Freiheit, beim Einkaufen spontan Lebensmittel auszuwählen, die reizvoll aussehen (auch wenn man zunächst nicht weiß, was sich damit anfangen lässt)
* Die KI kombiniert Zutaten und Methoden nicht beliebig, sondern nutzt tiefe Warenkunde für systematische Innovation. Sie bricht Gewohnheiten durch fundierte, algorithmische Logik und erzwingt so kreative Kombinationen, die weit jenseits menschlicher Intuition liegen.
Persönlich:
* Massive Vereinfachung der Küchenplanung
* Selbsterkenntnis: besser verstehen, warum man bestimmte Dinge lieber isst als andere
* Wachsende Kochkompetenz durch niederschwelliges Erlernen neuer Kochtechniken und -praktiken im ganz normalen Küchenalltag
* Unterschiedliche Geschmäcker in Mehrpersonenhaushalten sind kein Problem, sondern ein Ausgangspunkt — die KI findet Gerichte, die verschiedene Vorlieben nicht ignorieren, sondern produktiv miteinander verbinden.
=== Ist das auch gesünder? ===
Dieser Leitfaden ist '''ernährungsphilosophisch neutral'''. Er macht keine Aussagen darüber, was eine gesunde Ernährung ausmacht — das liegt in der Verantwortung jedes Benutzers selbst. Die Methode funktioniert gleichermaßen für Veganer wie für eine mediterrane Vollwertkost wie für Menschen, die gern ''Convenience Food'' verwenden.
Grundlegend tendiert diese Methode aber dazu, weitaus mehr Abwechslung auf den Tisch zu bringen, als dies beim gewöhnlichen Kochen der Fall ist, und damit einer einseitigen Ernährung entgegenzuwirken.
== 2. Datenschutz und Sicherheit ==
[[File:Padlock infront of isolated white background 02.jpg|frameless|right]]
Wer einem Chatbot mitteilt, was er im Kühlschrank hat, welche Gewürze er bevorzugt, welche Lebensmittel er nicht verträgt und ob er vielleicht Kalorien zu reduzieren versucht, gibt persönliche Daten preis — das ist eine Beobachtung, die keine Verharmlosung, sondern eine nüchterne Antwort verdient.
=== Was man tatsächlich preisgibt ===
Das Kochprofil, das dieser Leitfaden empfiehlt, enthält im Wesentlichen Lifestyle-Daten: Vorratsbestände, Geschmackspräferenzen, Küchenausstattung, lokale Einkaufsmöglichkeiten. Es enthält keine Finanzdaten, keine Identitätsdaten, keine Kommunikationsinhalte. Wer dieselbe Abwägung für die Daten vornimmt, die er Google, Amazon oder einem Supermarkt-Bonusprogramm täglich und routinemäßig übergibt — Standortdaten, Suchanfragen, vollständiges Einkaufsverhalten — wird feststellen, dass das Kochprofil typischerweise weniger sensitiv ist als das, was er anderswo längst preisgegeben hat. Das bedeutet nicht, dass die Sorge unberechtigt ist. Es bedeutet, dass sie abgewägt werden sollte.
Heikler als reine Lifestyle-Daten sind Ernährungsanforderungen, die medizinische Diagnosen implizieren, ohne dass der Benutzer das explizit benennt. Eine natriumarme Ernährung verweist auf Bluthochdruck oder Herzerkrankung. Eine FODMAP-reduzierte Ernährung verweist auf Reizdarmsyndrom. Die Vermeidung von Tyramin-reichen Lebensmitteln — Hartkäse, Rotwein, Wurstwaren — verweist auf eine MAO-Hemmer-Medikation. Diese Daten fallen in Europa unter den stärksten Schutzbereich der DSGVO; in anderen Rechtsordnungen ist der Schutz schwächer oder fehlt ganz. Auch hier muss man abwägen, ob und inwieweit die Vorteile, die der personalisierte Küchenassistent bringt, die vermuteten Risiken aufzuwiegen vermögen.
=== Vier Optionen auf einem Sicherheitsspektrum ===
'''Option 1: Cloud-KI mit angepassten Datenschutzeinstellungen'''. Alle großen Anbieter erlauben es, die Verwendung von Gesprächsdaten für das Modelltraining zu deaktivieren. Das reduziert das Risiko erheblich, eliminiert es aber nicht vollständig, da Gespräche für Sicherheits- und Qualitätszwecke temporär gespeichert werden können.
'''Option 2: API-Zugang'''. Wer über die Programmierschnittstelle auf einen Chatbot zugreift, hat in der Regel stärkere Garantien: Die großen Anbieter schließen API-Daten standardmäßig vom Modelltraining. Das setzt allerdings eine gewisse technische Versiertheit des Benutzers voraus.
'''Option 3: Anonymisiertes Profil'''. Das Benutzerprofil enthält per se keinen zwingend identifizierenden Inhalt. Es kann konsequent ohne Namen, ohne präzise Ortsangaben und ohne andere direkt identifizierende Informationen formuliert werden. „In der Nachbarschaft gibt es einen türkischen Lebensmittelladen” ist nicht re-identifizierend. Das Profil kann als anonymes Dokument geführt werden.
'''Option 4: Lokale Sprachmodelle'''. Für Benutzer, die grundsätzlich keine Daten an Cloud-Dienste senden wollen, sind lokal installierte Modelle die konsequenteste Lösung. Kein Byte verlässt das Gerät. Empfehlenswerte Werkzeuge hierfür sind '''LM Studio''' — mit grafischer Benutzeroberfläche, auch für Nicht-Techniker geeignet — sowie '''GPT4All''' und '''Jan''', beide kostenlos und auf Windows, Mac und Linux lauffähig. Als Modelle eignen sich für Kochzwecke auch kleinere Varianten (7 bis 13 Milliarden Parameter), die auf jedem modernen Laptop ohne Spezial-Hardware laufen. Die Modellqualität ist gegenüber den großen Cloud-Diensten etwas geringer, für Rezeptvorschläge jedoch vollständig ausreichend. Der einzige Vorbehalt: Die Erstinstallation erfordert etwas technisches Engagement — ist dieser Schritt aber getan, ist die Bedienung so einfach wie bei einem normalen Chatbot.
=== Einfache Zusatzoption: Das Profil lokal führen ===
Als Alternative zum plattformseitigen Speichern (in den Benutzereinstellungen der KI) empfiehlt sich das Führen des Benutzerprofils als einfache Textdatei auf dem eigenen Computer oder Smartphone — etwa in der Notizen-App, in einem Word-Dokument oder in einem beliebigen anderen Textprogramm.
Das gibt dem Benutzer zusätzliche Kontrolle darüber, was er wann preisgibt — und es löst zugleich ein praktisches Problem: KI-Chatbots haben kein dauerhaftes Gedächtnis. Was in einem langen Chat weit zurückliegt, ist für die KI irgendwann schlicht nicht mehr präsent. Das Profil muss deshalb regelmäßig neu eingegeben werden — spätestens dann, wenn man merkt, dass die KI Präferenzen nicht mehr berücksichtigt, proaktiv alle zehn bis fünfzehn Kochsitzungen.
Wer das Profil als Textdatei auf dem Gerät hat, erledigt das mit zwei Handgriffen: Datei öffnen, Inhalt in das Chatfenster kopieren.
== 3. Das Benutzerprofil ==
[[Datei:Deepin Icon Theme – deepin-contacts.svg|right|rahmenlos]]
Das Benutzerprofil ist das Fundament der gesamten Methode. Ohne dieses Element bleibt die KI ein generisches Nachschlagewerk — erst das Profil macht sie zum personalisierten Küchenassistenten, der weiß, womit und für wen er arbeitet.
Das Benutzerprofil besteht aus zwei Teilen. Das '''Küchenprofil''' erfasst die sachlichen, objektiven Parameter: was ständig vorhanden ist, was ausgeschlossen ist, welche Geräte zur Verfügung stehen, was eingekauft werden kann. Das '''Geschmacksprofil''' erfasst die subjektiven, dynamischen Parameter: was dem Benutzer schmeckt, was nicht, und wie sich seine Vorlieben im Laufe der Zeit entfalten.
=== Das Küchenprofil ===
==== Was ist ein Küchenprofil? ====
Unter einem Küchenprofil verstehen wir hier die Gesamtheit der Informationen, die ein Küchenassistent über die Situation in einem Haushalt braucht, damit er effizient arbeiten kann. Lediglich die Informationen über die geschmacklichen Vorlieben des Benutzers und der Mitglieder seines Haushalts werden nicht im Küchenprofil, sondern [[#Das Geschmacksprofil|anderswo]] verwaltet.
Hier eine Liste von Parametern, aus denen das Küchenprofil sich zusammensetzen kann:
[[File:Spice rack, 2014.jpg|thumb]]
; Dauervorräte: Zutaten, die ständig verfügbar sind, weil ihre Vorräte, wenn sie zur Neige gegen, routinemäßig wieder aufgestockt werden:
: ''Gewürzinventar'': Der diagnostisch wertvollste Teil des gesamten Profils. Wer der KI mitteilt, dass er Harissa, Sumach, geräuchertes Paprikapulver, Kecap Manis und Szechuanpfeffer im Schrank hat, kommuniziert damit ein Geschmacksprofil, das die KI sofort und präzise interpretieren kann — aussagekräftiger als jede abstrakte Beschreibung von Vorlieben.
: ''Fensterbank-Kräuter'';
: ''Gemüsekorb'': Kartoffeln, Zwiebeln, Schalotten, Knoblauch, Ingwer, Tomaten und andere frische Zutaten, die man immer im Haus hat, die aber nicht in den Kühlschrank gehören;
: ''Vorratsschrank'': Öle und Essige, Konserven, Hülsenfrüchte, Getreide und Pasta, Nüsse und Trockenfrüchte, Saucen und Pasten;
: ''Dauervorrat Kühlschrank'': Milchprodukte, Eier, Condiments, Aufschnitt oder andere Kühlwaren, die regelmäßig nachgekauft werden;
: ''Tiefkühlschrank'': Gemüse, Kräuter, Fleisch, Meeresfrüchte und andere Zutaten, die man tiefgekühlt ständig vorrätig hält; die KI kann ausgezeichnet auch mit Convenience Food wie z.B. tiefgefrorenem Gyros arbeiten.
; Saisonale Ressourcen: Zutaten, die nur in bestimmten Monaten leicht verfügbar sind, etwa weil sie aus dem eigenen Garten kommen.
; Ausschlusslisten: Abneigungen gegen bestimmte Zutaten, Allergien, Unverträglichkeiten, ethische, religiöse oder diätische Einschränkungen.
; Positivlisten: Zutaten, die vor anderen bevorzugt werden (z.B. „Möglichst oft etwas mit Kartoffeln oder Vollkorn.“).
[[File:20051018Épicerie d'Amélie Poulain 2.jpg|thumb]]
; Einkaufsressourcen: Welche Läden sind in der Nähe, und worauf sind sie spezialisiert? Ein türkischer Lebensmittelladen ermöglicht andere Rezeptvorschläge als ein osteuropäischer, ein asiatischer Supermarkt andere als ein hispanischer Tiendita. Diese Information erlaubt der KI, bei Bedarf Zutaten in den Vorschlag einzubeziehen, die über das Standardsortiment eines Supermarkts hinausgehen — und die den Benutzer geschmacklich bereichern können.
; Küchengeräte und Utensilien: Hier genügt es, über das Basisequipment hinaus zu inventarisieren — Herd, Backofen, Messer und Töpfe darf die KI als selbstverständlich voraussetzen. Was sie wissen sollte, sind Geräte, die besondere Zubereitungsarten ermöglichen oder einschränken: Dampfgarer, Sous-vide-Gerät, Standmixer, Stabmixer, Reiskocher, Gusseisenpfanne, Wok, Tajine, Dutch Oven, Pizzastein und ähnliches. Wenn möglich, lohnt sich die Angabe relevanter Leistungsparameter — etwa die maximale Wattzahl eines Stabmixers oder die Größe des Backofens — damit die KI einschätzen kann, was ein Gerät tatsächlich leisten kann. Wenn man das Modell genau bezeichnet, ist die KI manchmal sogar schlauer als der Benutzer, was das Gerät genau leisten kann.
Zweckmäßig ist es, im Küchenprofil auch auch die '''Grundeinstellungen der Sitzungsparameter''' anzugeben, also diejenigen Informationen beispielsweise zur Zahl der benötigten Portionen, mit denen die KI im Regelfall arbeiten soll. Mehr dazu [[#Sitzungsparameter|weiter unten]].
==== Wie man das Küchenprofil erstellt und was man dann damit macht ====
Wenn man den neuen Chat, den man künftig zum Kochen verwenden wird, anlegt, ist das Küchenprofil zweckmäßigerweise eines der ersten Dokumente, die man der KI übergeben sollte. Es braucht nicht von Anfang an vollständig zu sein, sondern kann nach und nach vervollständigt werden – ein gut gepflegtes Profil macht aber den Unterschied zwischen generischen Rezeptvorschlägen und solchen, die dem Benutzer das Leben tatsächlich einfacher machen.
Damit man auf das Küchenprofil stets einfach zugreifen kann, ist es zweckmäßig, es nicht direkt in die KI einzutippen, sondern es separat davon in einem Texteditor zu erstellen. Dort kann man es nach Bedarf jederzeit lesen, bearbeiten, ergänzen und aktualisieren. Dann überträgt man es entweder mit Kopieren+Einfügen oder per Hochladen in die KI. Falls das Gedächtnis der KI später, nach einigen Sitzungen zu schwächeln beginnt, übergibt man das Küchenprofil einfach erneut.
=== Das Geschmacksprofil ===
[[File:Banchans.jpg|thumb]]
Das Geschmacksprofil unterscheidet sich grundlegend von allen anderen Teilen des Benutzerprofils. Während Gewürzinventar, Küchengeräte und Ausschlussliste statische Fakten sind, die einmal erfasst und gelegentlich aktualisiert werden, ist das Geschmacksprofil ein '''lebendes Dokument''' — eines, das nie wirklich abgeschlossen ist und das mit jeder Kochsitzung präziser wird. Es ist zugleich der Teil des Profils, den manche Benutzer vielleicht am schwierigsten finden werden, weil er eine Art Selbstkenntnis voraussetzt, die man oft erst im Dialog mit der KI entwickelt.
==== Dimensionen des Geschmacks ====
Hier einige Dimensionen des Geschmacks, die nach und nach ins Benutzerprofil eingehen sollten:
; Ethnische Küchen und Kochtraditionen: Welche Küchen der Welt sprechen den Benutzer an? Das muss keine erschöpfende Liste sein — oft genügt es, einige Affinitäten zu benennen und einige Abneigungen. Eine Vorliebe für japanische und peruanische Küche bei gleichzeitiger Skepsis gegenüber sehr fetthaltigen nordeuropäischen Gerichten ist bereits eine präzise und nützliche Angabe. Die KI kann daraus nicht nur Rezeptvorschläge ableiten, sondern auch Querverbindungen herstellen — etwa Techniken aus einer Küche auf Zutaten einer anderen anwenden.
; Geschmacksbalance: Die fünf Grundgeschmäcker — salzig, sauer, süß, bitter, umami — treten in jedem Gericht in einem bestimmten Verhältnis auf. Manche Benutzer bevorzugen klar dominante Profile, andere schätzen komplexe Gleichgewichte. ''Eine Vorliebe für ausgeprägte Säure, kombiniert mit Umami-Tiefe und wenig Süße'', ist eine Information, die die KI unmittelbar in die Rezeptauswahl einfließen lässt.
; Aromarichtungen: Wie intensiv darf ein Gericht gewürzt sein? Welche Rolle spielen Schärfe, Kräuterintensität, Rauchigkeit, Fermentiertes, Bitteres? Wer der KI mitteilt, dass er großzügigen Gebrauch von frischen Kräutern schätzt, Schärfe bis zu einem bestimmten Grad liebt und Rauchigkeit als willkommene Hintergrundnote empfindet, gibt ihr ein Koordinatensystem, das weit präziser ist als eine allgemeine Aussage wie „ich mag würziges Essen”.
; Texturpräferenzen: Textur ist eine der am häufigsten unterschätzten Geschmacksdimensionen. Wer knusprige Oberflächen liebt, wer cremige Konsistenzen bevorzugt, wer Bissfestigkeit schätzt oder wer bestimmte Texturen — etwa mehlige Konsistenz oder sehr weiches Fleisch — als unangenehm empfindet, sollte das im Profil festhalten. Ebenso relevant ist die Frage, ob Texturkontraste in einem Gericht willkommen sind — etwa knusprige Einlagen in einer cremigen Suppe — oder ob Homogenität bevorzugt wird.
==== Die Ermittlung des Geschmacksprofils als iterativer Prozess ====
[[Datei:Dish based on an AI-generated cooking recipe 12.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Pfannengerührte Shrimps mit Ei und Spinat auf schwarzem Perlreis mit marinierten Knoblauchstengeln, gewürzt u.a. mit Gochujang und Spicy Chili Crisp]]
Am Anfang wird das Geschmacksprofil zwangsläufig unvollständig und unscharf sein — das ist normal und kein Mangel. Die KI braucht vom Benutzer, um nützlich zu sein, keine perfekte Selbstbeschreibung. Sie braucht nur einen Ausgangspunkt, an dem sie ihre Arbeit beginnen kann.
Die wenigsten Menschen haben Übung darin, in Worten exakt auszudrücken, warum sie bestimmte Zutaten, bestimmte Zubereitungsweisen und bestimmte Gerichte mögen oder nicht mögen. Aber auch wenn die KI das Geschmacksprofil eines Benutzers am Anfang noch nicht kennt, hat sie mehrere Mittel, um es zu erforschen:
; Rezeptauswahl als Signal: Jedes Mal, wenn der Benutzer aus mehreren Vorschlägen einen auswählt und die anderen verwirft, teilt er der KI etwas über seine Präferenzen mit — auch wenn er das nicht explizit formuliert.
; Rezept-Modifikation als Signal: Wenn die KI ein Rezept vorschlägt, wird der Nutzer manchmal eingreifen: „geht das auch ohne Knoblauch?", „lieber Zitrone als Essig", „nein, keine Sahne – lieber Kokosmilch". Auch damit verrät er der KI oft mehr über seinen Geschmack, als ihm bewusst ist.
; Post-cook-Review: Wenn ein Gericht besonders gut war, oder im Gegenteil nicht gefallen hat, sollte die KI das unbedingt erfahren. „Zu säuerlich für meinen Geschmack, die Textur war perfekt, die Kombination Koriander und Limette würde ich gerne öfter sehen” ist eine außerordentlich informationsreiche Aussage, die das Profil unmittelbar verfeinert.
Im Laufe von Wochen und Monaten entsteht so ein '''kollaboratives Geschmacks-Profiling''': die KI nähert sich den tatsächlichen Präferenzen des Benutzers iterativ an, oft weitaus präziser, als es dem Benutzer selbst möglich wäre, sie von vornherein zu beschreiben.
In '''Mehrpersonenhaushalten''' fällt das Urteil häufig nicht einhellig aus. Damit die KI gezielt nach Kompromissen forschen kann, sollte sie möglichst genaue Information darüber erhalten, wer was gemocht oder nicht gemocht hat: z.B. „Die Schärfe durch das Gochujang war für mich ideal, führte aber bei M. zum sofortigen Abbruch; R. schlägt vor, die Schärfe künftig über ein separates Topping zu lösen.“
==== Beschleunigtes Geschmacksprofiling ====
[[File:Dish based on an AI-generated cooking recipe 02.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Pacific Rim Surf & Turf Bowl, mit fein geschnittenem Steak, Jacobsmuscheln, Jicama, Anaheim-Chili, Edamame, Koriander und Avocado]]
Wer ungeduldig ist und das Geschmacksprofiling nicht einfach seinem natürlichen Verlauf überlassen will, kann den Prozess durch verschiedene Maßnahmen beschleunigen:
* Die '''Auswahl begründen''': Die KI bietet zu Beginn jeder Kochsitzung typischerweise drei Rezeptvorschläge zur Auswahl an, von denen man einen auswählt. Wer der KI seine Entscheidung nicht einfach nur mitteilt, sondern sie auch ''kommentiert'', liefert ihr damit wertvolle zusätzliche Profilinformation.
* '''Lieblingsgerichte nennen''': Eine Liste von Gerichten, die man besonders gern mag — möglichst mit kurzer Beschreibung oder Rezept — ist für die KI ein außerordentlich ergiebiges Ausgangsmaterial, aus dem sie das Geschmacksprofil unmittelbar herausarbeiten kann.
* Ein '''strukturiertes Assessment''' durchführen: Der Benutzer fordert die KI auf, ihm gezielte Fragen zu stellen, um sein Geschmacksprofil herauszuarbeiten. Das kann man entweder dialogisch machen oder mit Hilfe eines Fragebogens, den man den Chatbot erstellen lässt.
----
<div class="toccolours mw-collapsible mw-collapsed">
<div style="font-weight:bold;line-height:2.6;">Hier ein Beispiel, wie so ein Fragebogen aussehen kann.</div>
<div class="mw-collapsible-content">
<div style="color:purple;">
''Die folgenden Fragen können helfen, eine Bestandsaufnahme der Vorlieben eines Benutzers für Geschmacksrichtungen, Aromen und Texturen vorzunehmen. Ob jemand Fenchel mag oder verabscheut, ob er Saures angenehm oder unangenehm findet und ob er Krosses oder Cremiges bevorzugt, ist etwas, das nur einem selbst gehört und das niemals Gegenstand eines Werturteils sein kann. In Geschmacksfragen gibt es kein Richtig und kein Falsch. Auch in einem Assessment des Geschmacksprofils gibt es darum keine richtigen oder falschen Antworten.''
''Wer möchte, kann diesen Fragebogen gern mit Paste&Copy in eine Textverarbeitung übertragen, ausfüllen und dann – mit der Bitte um Auswertung – einem Chatbot seines Vertrauens übergeben.''
1. Erinnere dich an die schlimmsten Gerichte deiner Kindheit (Oma, Schulkantine, Ferienlager). Was wurde dir zugemutet? Beschreibe nicht nur, was es war, sondern auch: War es das schleimige Mundgefühl? Die bittere Note? Die Zähigkeit? Die völlige Abwesenheit von Textur? Lass deiner Wut beim Schreiben freien Lauf.
2. Wenn du einen Bissen von einem Gericht in den Mund nimmst, was suchst du physiologisch?
:[ ] Den harten, fast anstrengenden Widerstand (wie bei einer krustigen Brotrinde oder Nüssen).
:[ ] Das zarte, schmelzende Gefühl (wie bei einer Mousse oder weichem Risotto).
:[ ] Den "Snap" (wie bei einer knackigen Garnele oder einer frischen Paprika).
: Was mir dazu auch noch einfällt:
3. Stell dir eine Textur vor, die glatt, weich und fast flüssig ist (z.B. eine pochierte Auster, eine weiche Okra-Schote oder ein sehr weicher Tofu). Was empfindest du:
:[ ] Faszinierend, dieses schmelzende, glitschige Gefühl ist ein Highlight.
:[ ] Absolutes No-Go; mein Essen braucht Struktur und darf nicht „ausweichen“.
: Was mir dazu auch noch einfällt:
4. Du landest schiffbrüchig auf einer einsamen Insel. Vom sinkenden Schiff konntest du nur eine aromatische Komponente mitnehmen. Salz ist kein Thema, das gewinnen wir aus dem Meer. Was rettet deine Lebensfreude?
:[ ] Die pure Hitze (Chili, scharfer Pfeffer).
:[ ] Die ätherische Tiefe (Knoblauch, Zwiebelgewächse).
:[ ] Die krautige Frische (Koriander, Minze, Basilikum).
:[ ] Die erdige Wärme (Kreuzkümmel, Kurkuma, Zimt).
: Was mir dazu auch noch einfällt:
5. Eine Zitrone wird direkt vor dir aufgeschnitten. Was passiert in deinem Kopf?
:[ ] „Erfrischend, direkt ein bisschen Saft übers Essen für den nötigen Zing!“
:[ ] „Oh Gott, mir zieht’s alles zusammen, unvorstellbar, das in den Mund zu nehmen!“
: Was mir dazu auch noch einfällt:
6. Manche Menschen lieben dunkle Aromen, die durch lange Reifung oder Konzentration entstehen – man nennt das „Umami“. Denke an den intensiven Kern eines alten Parmesans, die dunkle Würze einer über Stunden eingekochten Fleischsauce (Demi-Glace), die Aromatik von Sardellen oder die Tiefe von Sojasauce und Miso.
:[ ] Je intensiver und „dunkler“, desto besser. Das ist die wahre Tiefe.
:[ ] Ich mag es lieber sauber, frisch und eindeutig erkennbar.
: Was mir dazu auch noch einfällt:
7. Wie muss dein Teller am Ende aussehen?
:[ ] Die Sauce ist ein dezenter Begleiter, der die Hauptdarsteller nur glänzen lässt.
:[ ] Ich brauche eine „Suppen-Ästhetik“; die Beilagen müssen in Sauce baden.
: Was mir dazu auch noch einfällt:
8. Wie darf Fett in deinem Essen vorkommen?
:[ ] Sichtbar und pur (die dicke Ölschicht auf dem Pesto, das Stück Butter auf der Backkartoffel, der Fettrand am Fleisch).
:[ ] Nur emulgiert und versteckt (in einer cremigen Sauce oder im Teig).
: Was mir dazu auch noch einfällt:
9. Dein Essen ist knallgrün vor lauter frisch gehackten Kräutern. Dein Impuls?
:[ ] „Großartig, das bringt Komplexität und Frische!“
:[ ] „Hilfe, das schmeckt bestimmt wie Rasenschnitt!“
: Was mir dazu auch noch einfällt:
10. Im Kino wandert deine Hand blind in eine Schüssel. Was hoffst du zu finden?
:[ ] Etwas, das laut kracht und salzig ist (Chips, geröstete Kerne).
:[ ] Etwas Klebrig-Süßes, das den Kiefer beschäftigt (Karamell, Trockenfrüchte).
:[ ] Etwas Prickelnd-Saures (saure Fruchtgummis, eingelegtes Gemüse).
: Was mir dazu auch noch einfällt:
11. Du nimmst einen Löffel Nutella oder Honig pur aus einem Glas.
:[ ] Ich genieße die pure Befriedigung und könnte noch einen zweiten Löffel nehmen.
:[ ] Ich brauche danach sofort einen starken Espresso oder ein Glas Wasser zum Neutralisieren.
: Was mir dazu auch noch einfällt:
12. Vergiss Wasser – was ist dein bevorzugter „Gegenspieler“ zu einem komplexen Gericht?
:[ ] Etwas mit viel Kohlensäure und Süße (Limo, Cola).
:[ ] Flüssiges Obst (Apfelsaft, Karottensaft, Pfirsichnektar)
:[ ] Etwas Herbes/Bitteres (Bier, Tonic Water, schwarzer Tee/Kaffee).
:[ ] Etwas Säurebetontes (Wein, Schorle, Kombucha).
: Was mir dazu auch noch einfällt:
13. Welches Lebensmittel oder welche Kombination hat dich in deinem Leben am meisten positiv überrascht? (Z.B. Algen, Sashimi, Chili mit Schokolade, Wassermelone mit Feta).
14. Gibt es Lebensmittel, die zwar technisch „gut“ zubereitet sind, bei denen du aber einfach körperlich streikst?
15. Was ich über meine Geschmackspräferenzen sonst noch mitteilen möchte, das ich in diesem Fragebogen bisher noch nicht habe unterbringen können.
</div>
</div></div>
----
In '''Mehrpersonenhaushalten''' empfiehlt es sich, das Assessment für jeden getrennt durchzuführen — denn auch wenn gemeinsam gekocht wird, sind die Geschmacksprofile der Beteiligten selten identisch. Sie können leicht abweichen oder erheblich. Eine KI, die über diese Unterschiede im Bilde ist, kann bei der Rezeptauswahl helfen, sie zu überbrücken — und schlägt Gerichte vor, die verschiedene Präferenzen unter einen Hut bringen, statt routinemäßig nur einem Profil zu folgen.
==== Wozu? Ich weiß über meinen Geschmack doch jetzt schon mehr, als mir lieb ist. ====
[[Datei:Dish based on an AI-generated cooking recipe 11.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Geröstetes Schweinefilet mit Shiitake und einer Tamarinden-Ingwer-Reduktion auf Spinat-Sorghum, gewürzt u.a. mit Knoblauch und Noilly Prat]]
; Frage an die KI: <span style="color:#2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Es kostet mich Überwindung, aber hier einmal die reine Wahrheit: Mein größtes Glück ist es, mir am Abend eine Tiefkühlpizza zu backen, Dr. Oetker, die mit Salami. Weil die Coke Zero, die ich dazu trinke, mein Verlangen nach Süßem nicht stillt, brauche ich hinterher noch Schokolade. Meist schaffe ich es, nach 50 g aufzuhören. Sag mal ehrlich: mein Geschmack ist doch total versaut. Warum sollte ich mich noch der Demütigung eines Assessments unterziehen?</span>
; Antwort der KI: <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Ganz ehrlich: Dein Geschmack ist nicht „versaut“, er ist einfach nur perfekt auf die industrielle Logik optimiert. Salami-Pizza, Coke Zero und Schokolade bedienen die drei mächtigsten Hebel unseres Gehirns: Fett, Salz und den Bliss-Point (Süße). Dass du nach 50 g Schokolade aufhören kannst, zeigt sogar eine ziemlich beeindruckende Selbstbeherrschung.</span>
: <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Warum also das Assessment?</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Vom Passagier zum Piloten: Momentan steuert die Lebensmittelindustrie deine Gelüste über Kontrollknöpfe, die wir alle haben. Das Assessment ist kein Verhör, sondern eine Inventur dieser Knöpfe, damit du sie bedienen kannst – mit echtem Essen, das die gleichen Glücksgefühle auslöst, aber ohne das „Nachher-Tief“.</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Präzision statt Verzicht: Wir suchen nicht nach dem Salatblatt, das dich unglücklich macht. Wir suchen nach der Kombination aus Umami, Crunch und Säure, die deine Pizza-Lust auf ein Level hebt, gegen das die Tiefkühlware wie Pappe schmeckt.</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Keine Demütigung, sondern Daten. Für mich als KI ist deine Vorliebe für Salami-Pizza eine wertvolle Information, die mir hilft, dein Geschmacksprofil genauer zu sehen: Salami und Käse liefern dir intensive Fermentationsaromen (Umami), die Pizza den Crunch, und die Schokolade den nötigen Dopamin-Abschluss. Dasselbe können wir aber auch mit anderen Mitteln erreichen, und sogar noch besser.</span>
: <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Das Assessment ist kein Urteil, sondern die Blaupause, um dein „größtes Glück“ zu dekodieren. Statt Industrieware schlage ich dir Upgrades vor: Sauerteig-Fladenbrot, Finocchiona und Pecorino triggern dieselben Belohnungszentren wie Salami-Pizza, nur mit weitaus höherer Reizintensität. Was ich dir vorzuschlagen habe, ist nicht etwa fade Gesundheitsrohkost, sondern die ultimative, handwerkliche Version von dem, was dir tatsächlich am besten schmeckt.</span>
== 4. Ablauf der Koch-Sitzung ==
Der Rezept-Workflow ist die eigentliche Interaktion — der Moment, in dem aus Profil und Sitzungsparametern ein konkretes Gericht wird. Er folgt einer klaren Abfolge von Schritten, die sich nach wenigen Sitzungen als Routine einspielt:
{| class="wikitable"
! Benutzer-Input oder -Aktion !! KI-Output
|-
| Optional: Übergabe des Küchenprofils || Empfangsbestätigung
|-
| Konkreter Arbeitsauftrag, mit Sitzungsparametern<br/>z.B. <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Schlag mir 3 Rezepte für Spaghetti mit Tomatensauce vor, für 3 Personen. Ich habe noch frisches Basilikum im Kühlschrank.</span> || Ausgabe von Rezeptvorschlägen
|-
| Auswahl eines der Vorschläge<br/><span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Gib mir das Rezept für Nr. 1, die „mediterrane Umami-Bombe (Puttanesca-Stil)“. Können wir die Sardellen weglassen?</span> || Ausgabe des Rezepts
|-
| Rezept vor dem Kochen einmal kritisch lesen<br/>Gegebenenfalls Anforderung von Änderungen oder Korrekturen<br/><span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Was für Öl? Und kann es sein, dass du die Gewürze vergessen hast?</span></span> || Gegebenenfalls: Ausgabe des revidierten Rezepts
|-
| Optional: Rückfrage ''während'' des Kochens<br/><span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe gerade festgestellt, dass mein Basilikum ziemlich welk ist; wie kann ich es ersetzen?</span> || Frage wird beantwortet.<br/><span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Wenn nur die Optik das Problem ist, koch es in der Sauce 5 Minuten lang mit und nimm es dann heraus.</span>
|-
| Optional: Post-cook-Review<br/><span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Der Geschmack war okay, aber mir hat das leuchtende Grün auf dem Teller gefehlt; die Extraktion ist eine gute Notlösung, ersetzt für mich aber nicht das visuelle Erlebnis von frischem Basilikum.</span>||
|}
=== Erster Schritt: Übergabe des Küchenprofils ===
Es ist möglich, ohne Übergabe eines [[#Das Küchenprofil|Küchenprotokolls]] zu arbeiten. Die KI verhält sich dann aber tendenziell wie ein gewöhnliches Kochbuch und mutet dem Benutzer zum Beispiel zu, dass er Zutaten erst noch kaufen muss.
=== Zweiter Schritt: Arbeitsauftrag ===
[[File:Dish based on an AI-generated cooking recipe 05.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Mediterranean Chicken & Sweet Potato Roast, mit zart-krossem Pistazien-Duqqa und einer Joghurt-Sauce]]
Der Arbeitsauftrag ist der erste Input für die KI, ohne den überhaupt nichts geht. Hier einige Beispiele:
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Habe frischen schwarzen Kabeljau. 4 Portionen, einer meiner Gäste isst nur ganz Klassisches. Einkauf in einem sehr gut sortierten großen Supermarkt ist eingeplant. Mittlere Komplexität. 4 Vorschläge.</span>
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">3 Vorschläge für ein mediterranes 3-Gänge-Menü. Habe frische Langusten vom Markt. Zubereitung darf technisch anspruchsvoll sein und beliebig viel Zeit beanspruchen. Reste willkommen, wenn sinnvoll verwertbar. Zielzeit: 20:00 Uhr.</span>
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">4 Vorschläge für 6 Personen (100 %). Muss einfach zuzubereiten sein und darf maximal 40 Minuten dauern. Vor andere Zutaten verbrauchen: 1 kg Kartoffeln, außerdem 8 Eier, die unbedingt heute weg sollen. Gezieltes Meal-prep für morgen. Kein Einkauf möglich.</span>
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich brauche 2 Vorschläge für ein indisches Abendessen für 3 Personen (Portionsgröße 120 %). Ankerzutat: Panir-Käse. Komplexität: Mittel. Zielzeit: 19:15 Uhr. Zeig mir etwas, das ich noch nicht kenne. Bitte genaue Timings für alle Schritte.</span>
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Gib mir ein komplettes Rezept. Cuisine: Südostasiatisch. Ich habe eine rote Paprika und 100 ml Kokosmilch, beides muss weg. Einkaufen im Discounter möglich, darf aber höchstens 15 Euro kosten. Keine Reste erwünscht. Überrasch mich mit einer Technik, die ich noch nicht kenne. Fast hätte ich es vergessen: meine Frau kommt heute erst spät von der Arbeit, wir essen getrennt; schlag mir etwas vor, das sie gut aufwärmen kann.</span>
{{Anker|Sitzungsparameter}}Außer der Bezeichnung des gewünschten Gerichts können im Arbeitsauftrag auch '''Parameter''' übergeben werden, z.B. die Zahl der gewünschten Portionen. Parameter, die praktisch unveränderlich sind (weil z.B. in einem Zwei-Personen-Haushalt fast immer zwei Portionen gebraucht werden), kann man – statt sie im Arbeitsauftrag jedesmal neu anzugeben – ins Küchenprofil schreiben, und erwähnt sie im Arbeitsauftrag nur dann, wenn der Wert einmal abweicht (z.B. die Zahl der Portionen, wenn Gäste kommen). Hier eine Übersicht über naheliegene und mögliche Sitzungsparameter:
[[File:Dish based on an AI-generated cooking recipe 07.jpg|thumb|Nach einem Chatbot-Rezept gekocht: „Slow-Roasted“ Pork & Kimchi-Stew (Jjigae-Style), mit Schweinehack, Kimchi, Süßkartoffel, Bok Choy, Würzbasis: weißes Miso und Gochujang; dazu brauner Basmati]]
; Zahl der Vorschläge: Die KI ist in der Lage, auf den Arbeitsauftrag direkt mit einem detaillierten Rezeptvorschlag zu antworten. Aus verschiedenen Gründen ist es jedoch zweckmäßiger, erst eine Anzahl von Vorschlägen abzurufen. In der Praxis bewährt haben sich '''drei oder vier Vorschläge''' (weniger erlauben nicht wirklich eine Wahl; mehr verleitet dazu, keinen zu wählen — ein aus der Entscheidungsforschung bekanntes Phänomen, das als ''Paradox der Wahl'' bezeichnet wird). Falls keiner von diesen gefallen sollte, lässt man einfach 3 oder 4 weitere ausgeben.
; Temporäres Vorratsupdate: Was ist heute vorhanden, das nicht zum Dauerbestand gehört? Frisches Gemüse, Obst, Kräuter aus dem Garten, ein Stück Fisch vom Markt, eine saisonale Spezialität — alles, was nur zeitweise verfügbar ist und in den Rezeptvorschlägen berücksichtigt werden soll.
; Use-first-Queue: Welche Zutaten müssen heute oder in den nächsten ein bis zwei Tagen verbraucht werden?
; Ankerzutaten: Welche Zutaten sollen auf jeden Fall im Rezept vorkommen — nicht weil sie dringend verbraucht werden müssen, sondern weil der Benutzer gezielt etwas damit kochen möchte? Das kann eine Zutat sein, die interessant aussah und spontan gekauft wurde oder auf die der Benutzer heute einfach Lust hat.
; Personenzahl und Portionsgröße: Für wie viele Personen wird gekocht, und in welcher Portionsgröße? Wer häufig mit der KI kocht, wird bald herausfinden, ob die Portionen z.B. 70 oder 90 oder 100 oder 120 % der standardmäßigen Portionsgröße betragen sollen.
; Novitäts-Präferenz: Sind Kreativität und Überraschungen erwünscht, oder soll die KI lieber etwas Vertrautes vorschlagen?
; Komplexitätslevel: Soll das Gericht einfach zuzubereiten sein oder darf es technisch anspruchsvoll sein?
; Zeitaufwand: Wie viel Zeit ist heute für die Essenszubereitung maximal verfügbar?
; Zielzeit der Mahlzeit: Wenn die Mahlzeit zu einem bestimmten Zeitpunkt auf den Tisch kommen soll, ist die KI in der Lage, für jeden Zubereitungsschritt die optimale Startzeit zu berechnen und als Zeitstempel ins Rezept aufzunehmen.
; Einkaufsbereitschaft: Soll die KI ausschließlich mit dem arbeiten, was vorhanden ist, oder ist der Benutzer bereit, noch Zutaten einzukaufen? Wo kann er einkaufen? Und was darf es kosten?
; Reste-Toleranz: Reste können sowohl vom zubereiteten Gericht als auch von Zutaten anfallen. Sind sie zu vermeiden oder erwünscht? Soll die KI, falls Reste erwünscht sind, Vorschläge machen, was damit anzufangen ist? Falls geplant ist, Reste schonend aufzubewahren oder einzufrieren: soll die KI Anleitung geben, wie dies am besten gemacht wird?
Wenn Sitzungsparameter für einen Benutzer praktisch immer dieselben sind (z.B. Personenzahl und Portionsgröße, Zielzeit der Mahlzeit), kann man sie als Grundeinstellungen ins Küchenprofil aufnehmen, und erwähnt sie im Arbeitsauftrag nur dann, wenn sie von der Grundeinstellung abweichen sollten.
=== Dritter Schritt: Vorschlagsrunde und Rezeptauswahl ===
; Benutzerinput: <div style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Mach mir drei Vorschläge für Spaghetti-Gerichte, die ich in Deutschland im Restaurant wahrscheinlich nie bekommen würde.</div>
; KI-Output:<div style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">1. Spaghetti con la Mollica (Kalabrien / Basilikata)</div>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Ein Paradebeispiel der Cucina Povera. Da Käse früher für viele zu teuer war, wurde altbackenes Brot als Geschmacks- und Texturgeber genutzt.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Das Besondere: Die Basis ist eine Emulsion aus hochwertigem Olivenöl, Anchovies, Knoblauch und Peperoncino. Das entscheidende Element ist die Mollica – in Öl goldbraun und knusprig ausgebackene Brotbrösel, die erst ganz am Ende über die Pasta gegeben werden.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Profil: Starkes Umami durch die Sardellen, komplexer texturaler Kontrast zwischen weicher Pasta und krossem Brot.</span>
----
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">2. Spaghetti al Nero di Seppia (Sizilien / Venedig)</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Dieses Gericht nutzt die Tinte des Tintenfisches nicht nur als Farbstoff, sondern als primäres Gewürz.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Das Besondere: Die Sauce wird aus frischem Tintenfisch, Weißwein, Knoblauch und der tiefschwarzen Tinte hergestellt. Entgegen der Erwartung schmeckt die Tinte nicht "fischig", sondern hat ein tiefes, erdiges und leicht metallisches Aroma.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Profil: Tiefes, dunkles Umami mit einer seidigen Textur und einer visuell radikalen Ästhetik.</span>
----
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">3. Spaghetti Cacio e Pepe (Lazio / Rom)</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Obwohl es simpel klingt (Käse und Pfeffer), ist es in seiner römischen Urform eine technische Herausforderung, die keinen Fehler verzeiht.</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Das Besondere: Es wird ausschließlich Pecorino Romano und frisch gerösteter, grob gemörserter schwarzer Pfeffer verwendet. Die Kunst besteht darin, durch die exakte Temperatur des Pastawassers eine Emulsion zu schaffen, bevor der Käse klumpt oder Fäden zieht.</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Profil: Starke Schärfe durch die ätherischen Öle des gerösteten Pfeffers, kombiniert mit der salzigen Dominanz des Schafskäses.</span>
Falls keiner der Vorschläge überzeugt, geht es in eine nächste Runde. Der Benutzer kann dabei kommentierend oder steuernd eingreifen. Beispiel:
:<span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Nr. 3 klingt gut, aber ich trau mir das mit der Emulsion nicht ganz zu. Und eigentlich hätte ich heute auch lieber etwas mit Tomaten. Gib mir noch drei.</span>
=== Vierter Schritt: Empfang das vollständigen Rezepts ===
Wenn der Benutzer seine Entscheidung gefällt und der KI mitgeteilt hat…
:<span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">„Spaghetti mit Tomaten-Konfitüre & geräuchertem Chili“ klingt spannend. Gib mir das Rezept, mit allen Zusatzinformationen, die ich in meinem Küchenprofil festgelegt habe. Außerdem brauche Zeitstempel. Zielzeit fürs Servieren ist 19 Uhr.</span>
…gibt diese das komplette Rezept aus. Beispiel:
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">'''Spaghetti mit Tomaten-Konfitüre & geräuchertem Chili'''</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Für 3 Personen | 100 % Portionsgröße | Zielzeit: 19:00 Uhr</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Dieses Gericht funktioniert für dich deshalb, weil es deine Vorliebe für extreme Umami-Konzentration und deutliche Säurespitzen aufgreift, während die cremige Burrata die für dich obligatorische feuchte Komponente liefert und einen spannungsreichen texturalen Kontrast zur dichten, würzigen Konfitüre bildet.</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Die Zutaten</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Basis: 750 g hochwertige Dosentomaten (San Marzano), 3 EL Tomatenmark.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Würze: 2 getrocknete Chipotle-Chilis (oder 1 EL Chipotle in Adobo), 3 Knoblauchzehen, Meersalz, 1 EL Zucker.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Pasta: 375 g Vollkorn-Spaghetti (z. B. Kamut oder Farro).</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Finish: 2 Kugeln Burrata (Kuhmilch), frisches Basilikum, 3 EL hochwertiges Olivenöl.</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Der Zeitplan</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">16:50 Uhr: Vorbereitung. Knoblauch fein hacken, Chipotles mörsern.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">17:00 Uhr: Start Konfitüre. Tomaten, Tomatenmark, Knoblauch, Chili und Süße in einem weiten Topf bei kleiner Hitze ansetzen.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">18:40 Uhr: Pastawasser aufsetzen (stark gesalzen). Konfitüre final abschmecken (Säure/Salz-Balance).</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">18:48 Uhr: Spaghetti ins Wasser geben (Garzeit ca. 10–12 Min. für Vollkorn, Packungsanleitung beachten).</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">18:57 Uhr: Pasta direkt aus dem Wasser in den Topf mit der Konfitüre heben. Ein Schluck Pastawasser dazu, kräftig durchschwenken, bis jede Nudel glänzt.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">19:00 Uhr: Anrichten. Burrata erst auf dem Teller mittig aufreißen und über die heiße Pasta geben. 2/3 Kugel pro Portion ist genug. Mit Olivenöl und Basilikum abschließen.</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Toppings & Pairing</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Toppings: Für den texturalen Kontrast (Crunch) empfehlen sich geröstete Pinienkerne oder knusprig ausgebratene Bacon-Splitter.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Begleitsalat: Ein herber Arugula-Salat (Rucola) mit gehobeltem Fenchel. Das Dressing sollte eine starke Zitronennote haben, um die Schwere der Konfitüre zu brechen.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Getränk: Ein kräftiger, leicht gekühlter Primitivo oder Negroamaro. Die Fruchtigkeit des Weins harmoniert mit der Tomatensüße, während die Tannine gegen die Schärfe bestehen. Alkoholfrei: Ein herbes Tonic Water mit Rosmarinzweig.</span>
Bevor der erste Handgriff getan wird, empfiehlt es sich dringend, '''das Rezept einmal vollständig zu lesen'''. Das dient zwei Zwecken: Erstens verschafft es einen Überblick über den Ablauf und verhindert, dass man mitten im Kochen überrascht wird — etwa von einer Ruhezeit, die das Rezept erfordert, oder von einem Schritt, der besondere Vorbereitung verlangt. Zweitens ist es der Moment, in dem mögliche Unstimmigkeiten auffallen: eine Zutat in der Liste, die in der Anleitung nicht mehr vorkommt, oder umgekehrt. Auf die Fallstricke des KI-generierten Rezepts geht Kapitel 7 ausführlicher ein.
=== Fünfter Schritt: Kochen — mit offenem Chatfenster ===
Das Chatfenster bleibt während des Kochens geöffnet. Dies ist einer der stillen, aber entscheidenden Vorteile der Methode gegenüber jedem Kochbuch und jeder Rezeptplattform: Die KI antwortet, wenn man sie mitten im Kochprozess fragt. Typische Situationen, in denen das unmittelbar nützlich ist:
*Eine Zutat fehlt doch: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe keinen Tahini — womit kann ich ihn ersetzen, und ändert das etwas an den Mengenverhältnissen?</span> Die KI nennt einen oder mehrere Ersätze und passt die Angaben entsprechend an.
*Eine Angabe ist unklar: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Was genau meinst du mit ‚auf mittlerer Hitze reduzieren' — soll die Sauce wirklich 20 Minuten köcheln oder reichen 10?</span> Die KI präzisiert und gibt wenn nötig visuelle oder sensorische Erkennungsmerkmale an — wie die Sauce aussehen, riechen oder sich verhalten soll, wenn der Schritt abgeschlossen ist.
*Ein Schritt erscheint verdächtig: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Das Rezept sagt, das Hähnchenfilet ist nach 12 Minuten gar — das kommt mir zu kurz vor für die Größe, die ich hier habe.</span> Die KI erklärt ihre Annahme, korrigiert sie falls nötig und gibt eine angepasste Empfehlung. Dieser Typ von Echtzeit-Rückfrage ist zugleich die wichtigste Prophylaxe gegen Kalibrationsfehler, die Kapitel 7 als häufigste Fehlerklasse benennt.
*Eine spontane Ergänzung bietet sich an: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe gerade noch frischen Estragon entdeckt — passt der zu diesem Gericht, und wenn ja, wann und wie gebe ich ihn dazu?</span> Die KI bewertet die Idee und integriert sie in den laufenden Kochprozess.
Das Chatfenster offen zu halten bedeutet nicht, dass man es ständig konsultieren muss — in der großen Mehrheit der Sitzungen verläuft das Kochen ohne Rückfragen. Aber die Möglichkeit, jederzeit nachzufragen, verändert die Grundhaltung beim Kochen: Man folgt dem Rezept nicht mehr blind, sondern im Dialog.
=== Sechster Schritt: Der Post-cook-Review ===
Nach dem Essen lohnt sich eine kurze Rückmeldung an die KI — ein bis zwei Sätze, nicht mehr. Was war gut? Was hätte besser sein können? Welche Zutat oder Technik war eine Entdeckung, welche eine Enttäuschung? Diese Rückmeldung ist der wichtigste Einzelbeitrag zum Aufbau des Geschmacksprofils. Eine KI, die nach zwanzig Sitzungen mit Post-cook-Reviews arbeitet, kennt die Präferenzen des Benutzers präziser als die meisten Menschen, die regelmäßig gemeinsam mit ihm essen.
Der Review muss nicht formal sein. Ein beiläufiger Kommentar — <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">die Sauce war zu dünn, aber die Kombination Zimt und Lamm war eine Offenbarung, die mache ich wieder</span> — ist vollständig ausreichend und außerordentlich informationsreich.
== 5. Spezielle Modi des KI-gestützten Kochens ==
[[File:Dish based on an AI-generated cooking recipe 03.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Tahini-Lemon-Bowl, mit gebackenen Kichererbsen und in Pfeilwurz paniertem, gebratenem Feta]]
=== Variationsmodus: Altbekanntes einmal ganz anders zubereiten ===
Der Variationsmodus dient dazu, bestehende Rezepte – egal ob aus dem Internet, einem Kochbuch oder aus der Familientradition – mithilfe der KI an neue Rahmenbedingungen anzupassen. Anstatt das Rad neu zu erfinden, nutzt die KI das Original als strukturelle Vorlage und modifiziert Zutaten, Techniken oder Nährwerte, um das Gericht für spezifische Gäste, knappe Zeitbudgets oder persönliche Gesundheitsziele zu optimieren, ohne den Kern des Rezepts zu verlieren.
Beispiele (das Originalrezept wird der KI hier jeweils als separate Datei übergeben):
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Optimiere dieses klassische französische Schmorgericht für mein persönliches Profil: Erhöhe die Säure, verstärke die Kräuternote und sorge für mehr Crunch.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wandle dieses Gulasch-Rezept in eine vegetarische Version um, die die tiefe Umami-Struktur und die fleischähnliche Textur beibehält.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Passe dieses Rezept für meinen Gast an, der eine schwere Nussallergie hat und keinen Knoblauch verträgt, ohne dass das Gericht flach schmeckt.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe nur 20 Minuten Zeit; wandle dieses 2-Stunden-Rezept in eine Express-Variante um, die geschmacklich so nah wie möglich am Original bleibt.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Gestalte dieses Rezept „kindersicher“: Entferne den Alkohol, mildere die Schärfe und verstecke das Gemüse so, dass die Textur homogen bleibt. Es soll dabei aber auch für Erwachsene attraktiv bleiben.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Mache aus diesem einfachen Alltagsgericht eine luxuriöse Festtagsversion unter Verwendung von Premium-Zutaten und einer anspruchsvolleren Anrichteweise.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Übersetze dieses Pfannengericht für die Zubereitung im Backofen (Convection Roast), da ich heute für zehn Personen gleichzeitig kochen muss.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Dekonstruiere dieses klassische Gericht in eine moderne Fingerfood-Variante, die man ohne Besteck auf einer Party essen kann.</span>
=== Optimierungsmodus: Reste und Convenience veredeln ===
[[File:Dish based on an AI-generated cooking recipe 06.jpg|thumb|Gestrecktes und optimiertes fleischlastiges chinesisches Restaurantessen: ergänzt wurden u.a. schwarzer Reis, ein TK-Gemüsemix und Römersalat (Flüssigkeiten: Liquid Amino, Noilly Prat; Reisessig)]]
Nicht jedes Essen beginnt mit frischen Rohzutaten; oft ist die Aufgabe in der Küche die Rettung von Resten, die Aufwertung von Fertiggerichten oder das „Strecken“ einer zu kleinen Portion Take-out. Die KI fungiert hier als kulinarischer Problemlöser, der bestehende Geschmacksprofile erkennt und durch gezielte Ergänzungen in neue, vollwertige Mahlzeiten verwandelt.
Besonders beim Aufwärmen oder bei Tiefkühlkost leidet oft die Konsistenz. Die KI kann hier helfen, durch komplementäre Techniken – wie das Hinzufügen von frischen Texturen oder das nachträgliche Herbeiführen von Röstnoten – die typischen Schwächen von aufgewärmtem Essen (Matschigkeit, Eindimensionalität) gezielt auszugleichen.
Prompts für das kulinarische Upcycling:
* Portionserweiterung & Textur-Rettung: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe hier eine halbe Portion übrig gebliebenes Thai-Curry mit Gemüse, das durch das Aufwärmen leider sehr weich und matschig geworden ist. Schlage mir vor, mit welchen trockenen Basiszutaten (z. B. Getreide oder Hülsenfrüchte) ich die Menge verdoppeln kann und wie ich durch ein schnelles Topping aus gerösteten Komponenten wieder massiven Crunch und Frische in das Gericht bringe.</span>
* Convenience-Tuning: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Als Basis für ein schnelles Essen möchte ich eine Dose klassische Linsensuppe verwenden. Schlage mir drei gezielte Eingriffe vor, um das Aroma Richtung Levantine zu verschieben, und nenne mir eine Technik, wie ich die weichgekochte Textur der Dosenlinsen durch eine knusprige Einlage oder ein kontrastierendes Finishing (z. B. in Butter gebratene Croutons mit spezifischen Gewürzen) kompensieren kann.</span>
* Resteverwertung mit Profil-Check: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Vom Vortag ist eine Portion gebratener Reis übrig geblieben. Das Gericht ist mir zu trocken und geschmacklich etwas flach. Erstelle eine Anleitung, wie ich daraus ein 'Moist-Dish' mache, indem du eine passende, schnell zubereitete Sauce hinzufügst, und gib mir eine Empfehlung für eine saure oder bittere Komponente, die das schwere Umami aufbricht.</span>
=== Kochen im Team ===
Beim Team-Kochen fungiert die KI als virtueller Küchenchef und Koordinator. Sie verteilt Aufgaben basierend auf den individuellen Fähigkeiten der Teammitglieder, berücksichtigt die Ergonomie des verfügbaren Raums und synchronisiert die Arbeitsabläufe durch präzise Zeitstempel. Ob als digitaler Aushang für alle oder als personalisierter Instruktions-Feed auf dem eigenen Smartphone – die KI sorgt dafür, dass aus dem potenziellen Chaos einer Gruppensitzung ein harmonischer, paralleler Workflow wird.
Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir wollen ein Rinderfilet Wellington mit einer komplexen Rotwein-Reduktion kochen. Wir sind zu viert: Zwei von uns sind sehr erfahren, zwei sind Anfänger. Verteile die Aufgaben so, dass die Profis das Fleisch parieren und die Sauce montieren, während die Anfänger die Duxelles vorbereiten und den Teig verzieren.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Plane die Zubereitung von selbstgemachten Teigtaschen (Gyoza) für drei Personen. Da unsere Küche sehr schmal ist, teile die Arbeit auf: Eine Person bereitet die Füllung am Esstisch vor, eine rollt den Teig aus und nur die dritte Person steht am Herd, um die Taschen portionsweise zu braten.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir bereiten selbstgemachte Pizza zu, inklusive Teig und Sauce. Wir sind zwei Erwachsene und zwei Kinder (6 und 9 Jahre). Gib den Kindern spezifische Aufgaben wie das Zerzupfen des Mozzarellas und das kreative Belegen, während die Erwachsenen den heißen Ofen und das Schneiden übernehmen.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir kochen ein klassisches Risotto mit geschmortem Saisongemüse. Eine Person im Team ist älter und möchte im Sitzen mithelfen. Weise ihr Aufgaben wie das Schälen des Gemüses und das Zupfen der Kräuter zu, während die anderen den Rührvorgang am Herd übernehmen.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir bereiten ein Drei-Gänge-Menü (Jakobsmuscheln, Lammrücken, Schokosoufflé) vor. Erstelle für uns drei einen synchronisierten Zeitplan mit Zeitstempeln, damit die Vorspeise um 19:30 Uhr und der Hauptgang um 20:15 Uhr serviert werden kann. Wer muss wann was vorbereiten?</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir kochen authentisches thailändisches Green Curry. Erstelle drei separate Instruktionslisten, die wir uns auf die Handys schicken können: Posten A ist für die Currypaste und das Aroma zuständig, Posten B für das Schneiden von Fleisch und Gemüse, Posten C für den Reis und das finale Abschmecken.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir kochen indisches Butter Chicken mit Naan-Brot. Verteile die Aufgaben auf drei Personen, aber baue für jeden von uns feste 5-Minuten-Slots für den Zwischenabwasch und das Aufräumen ein, damit nach dem Essen die Küche bereits fast sauber ist.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir planen ein herbstliches Buffet mit 5 verschiedenen Mezze. Weise uns vier klare Rollen zu (z. B. Chef de Cuisine, Saucier, Gardemanger, Patissier) und ordne die entsprechenden Rezepte und Teilschritte diesen Rollen zu, damit jeder die volle Verantwortung für seinen Bereich trägt.</span>
=== Strategisches Verbundkochen ===
Beim intelligenten Planen für mehrere Tage agiert die KI als persönlicher Logistikchef. Sie erstellt nicht nur einen strukturierten Einkaufszettel für alle geplanten Mahlzeiten, sondern taktet die Rezepte auch nach der Haltbarkeit der Zutaten: Empfindlicher Fisch oder frischer Spinat landen am Montag auf dem Teller, während robustes Wurzelgemüse oder vakuumierte Vorräte für den Freitag reserviert werden.
Dabei lassen sich zwei Ansätze unterscheiden:
==== Klassisches Batch-Cooking (Die Vorrats-Session) ====
In einer einzigen, konzentrierten Kochsession werden mehrere Mahlzeiten komplett oder in großen Komponenten vorgekocht. Dies ist ideal für Menschen mit wenig Zeit unter der Woche.
Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Plane eine zweistündige Session am Sonntag für 5 Büro-Lunches, die ich in der Mikrowelle aufwärmen kann. Ich möchte zwei verschiedene Eintöpfe und eine Getreidebasis vorkochen.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich möchte am Sonntag eine riesige Menge meiner levantinischen Basissauce vorkochen. Erstelle mir drei Variationen, wie ich diese Basis von Montag bis Mittwoch mit minimalem Aufwand (unter 10 Min.) völlig unterschiedlich finalisieren kann.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Am Samstag kommen meine Eltern zu Besuch. Plane meine Mahlzeiten ab Dienstag so, dass ich durch tägliches ‚Beiläufig-Vorbereiten‘ am Samstag, wenn die Gäste da sind, fast keine aktive Arbeit mehr habe.</span>
==== Synchron-Planung (Der strategische Einkauf) ====
Hier wird an den jeweiligen Tagen frisch gekocht, aber die Planung und der Einkauf erfolgen synchron. Dieser Modus nutzt Synergien bei den Zutaten und spart Zeit durch einmaliges, gezieltes Besorgen aller Waren.
Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Plane für die nächsten 5 Tage. Ich möchte nur zweimal tierisches Protein verwenden (Dienstag und Freitag). Erstelle eine Einkaufsliste, die sicherstellt, dass die frischen vegetarischen Zutaten für die ersten drei Tage nicht welken.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Erstelle einen Plan für 4 Tage: Dienstag ist bei uns fix Pastatag für die Kinder, Mittwoch esse ich allein (etwas Anspruchsvolleres), und Donnerstag muss es blitzschnell gehen. Maximiere die Überschneidungen beim Gemüse für den Einkaufskorb.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe heute einen Großeinkauf gemacht, inklusive empfindlicher Beeren und Hackfleisch. Einzelheiten lege ich in separater Datei bei. Sortiere meine ebenfalls beiliegenden Rezeptwünsche für die Woche so, dass die verderblichsten Sachen zuerst verbraucht werden, ohne dass der Speiseplan eintönig wirkt.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich kaufe einen großen Kopf Rotkohl und einen Sack Kartoffeln. Plane drei Gerichte über die Woche verteilt, die diese beiden Hauptzutaten nutzen, aber jedes Mal eine völlig andere Länderküche repräsentieren.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">In meinem Garten ist gerade der Mangold reif. Plane für die nächsten 3 Tage Rezepte, die jeweils eine große Portion Mangold verarbeiten, aber achte darauf, dass ich nur einmal für die ergänzenden Zutaten einkaufen gehen muss.</span>
=== Auf Bestellung erfunden ===
[[File:AI Designed Customized Cookies.jpg|thumb|Personalisierte Chocolate Chip Cookies. Der Benutzer wünschte sich trockene und sehr feste, krümelarme, mit grobem Salz bestreute Kekse mit minimierten einfachen Kohlenhydraten, seinem persönlichen Geschmacksprofil entsprechend. Die KI schlug u.a. Verwendung von Mandelmehl, Roggenvollkornmehl, Eiklar und Sucralose sowie zweifaches Backen vor. Die genannten Zutaten sind etwas, das dieser Benutzer tatsächlich ständig vorrätig hält.]]
Manchmal reicht Personalisierung im üblichen Sinne nicht aus. Das Benutzerprofil ist bekannt, das Geschmacksprofil ist geschärft — und trotzdem gibt es Situationen, in denen der Benutzer etwas braucht, das so spezifisch ist, dass kein Kochbuch und keine Rezeptplattform der Welt es liefern kann. Genau hier liegt eine der stillen Stärken der Methode: Die KI erfindet auf Anfrage Originalrezepte, die auf eine einzige Person und eine einzige Situation zugeschnitten sind. Ein paar Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Rezept für warmes High-Protein-Lunch im Büro, nur mit Wasserkocher und Thermoskanne gegart. Kein Tütensuppen-Niveau.</span>
''
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Brauche ein vollwertiges, klecker- und krümelfreies Gericht, das man beim Computerspiel blind mit einer Hand essen kann. Andere Hand fixiert.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Snack gesucht. Maximaler akustischer Crunch beim Kauen, aber minimal Kalorien. Fokus auf extremen oralen Widerstand.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Nahrhafter Frühstücksriegel, der beim Auspacken und Kauen absolut lautlos ist. Pendler-Modus, will die Mitreisenden nicht verärgern.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Hilfe, meine Kekse verschwinden immer in unbefugten Mündern! Denk dir ein Kleingebäck aus, das nur mein persönliches Profil perfekt trifft, aber für alle meine Mitbewohner geschmacklich abstoßend ist.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Einzelportion „Wellington“-Style für den Toaster-Ofen. Fertig in 15 Min, keine Restmengen bei Spezialzutaten.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Herzhaftes Hauptgericht mit kryogenen Zutaten zur Senkung der Körpertemperatur. Kein Salat, keine kalte Suppe.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Erfinde eine Zubereitungsart, die Gemüse in eine papierartige oder knusprige Form bringt. Keine matschigen Texturen erlaubt.</span>
'''Aber aufgepasst''': Die Gefahr des Scheiterns steigt hier, da die KI oft in technologische Grenzbereiche spekuliert. Anspruchsvolle Techniken wie die molekulare Sphärisierung oder das präzise Temperieren von Schokolade erfordern nicht nur spezialisiertes Equipment, sondern auch jahrelange Übung in der Feinmotorik. Wenn die KI komplexe Emulsionen oder chemisch sensible Texturkontraste vorschlägt, überschätzt der Laie leicht seine Fähigkeiten. Solche Verfahren verzeihen keine Abweichung bei Temperatur oder pH-Wert – handwerkliche Meisterschaft lässt sich nicht durch einen Prompt ersetzen.
=== Explorationsmodus ===
Im Explorationsmodus bittet der Benutzer die KI, auf Basis des bisherigen Geschmacksprofils aktiv neue Empfehlungen auszusprechen. Statt auf konkrete Zutaten oder Hunger zu reagieren, nutzt die KI das gespeicherte Wissen über Vorlieben und Abneigungen als Koordinatensystem, um gezielt Vorschläge in das noch unbekannte kulinarische Terrain zu machen – ähnlich einem personalisierten Algorithmus für Musik, nur für die Küche. Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Welche Zutat, die ich noch nie verwendet habe, passt perfekt zu meiner Vorliebe für Umami und Texturkontraste?</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Nenne mir eine regionale Küche, die ich bisher ignoriert habe, die aber genau mein Säure-Schärfe-Empfinden trifft.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Schlage mir drei Gewürze vor, die mein aktuelles Repertoire sinnvoll ergänzen, ohne redundant zu sein.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Entwirf ein Rezept, das eine Zutat verwendet, die ich normalerweise ablehne, aber so zubereitet ist, dass sie mein Profil anspricht.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Welches Getränk-Pairing (alkoholisch oder alkoholfrei) würde meine liebsten Abendessen ideal ergänzen?</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Welches Getreide oder Pseudogetreide fehlt mir noch für eine abwechslungsreiche Textur in meinen Bowls?</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Empfiehl mir ein spezielles Küchenwerkzeug, das Techniken ermöglicht, die mein Profil radikal erweitern würden.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Welche Konservierungsmethode (Einlegen, Trocknen etc.) passt am besten zu den Aromen, die ich das ganze Jahr über essen möchte?</span>
=== Bildungsmodus: Den eigenen Gaumen verstehen ===
Nach einer längeren Phase der Zusammenarbeit ist die KI in der Lage, nicht mehr nur Rezepte zu liefern, sondern ein konsistentes kulinarisches Profil für den Benutzer zu entwerfen. Dabei entstehen oft wiederkehrende Muster in der Auswahl von Gewürzen, Säureträgern oder Techniken, die tief in der Aromenlehre verwurzelt sind, vom Benutzer aber oft nur unbewusst als „stimmig“ wahrgenommen werden.
Im Bildungsmodus nutzt man die KI als Mentorin, um die theoretische Architektur hinter den eigenen Vorlieben zu entschlüsseln. Indem man die KI zwingt, ihre Entscheidungen zu begründen, wandelt sich das Kochen von einer bloßen Ausführung von Schritten zu einer bewussten Schulung des eigenen Geschmacks- und Technikverständnisses.
Beispielexplorationen für den Bildungsmodus:
* Musteranalyse der Zutaten: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">In den letzten Monaten hast du mir für fast alle Fleischgerichte eine Kombination aus Sternanis und Orangenschale vorgeschlagen. Erkläre mir die chemische und geschmackliche Logik hinter diesem Muster und warum das spezifisch zu meiner Vorliebe für dunkle, komplexe Saucen passt.</span>
* Technik-Check: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Du schlägst bei meinen Gemüsebeilagen oft das Rösten bei sehr hohen Temperaturen statt Dämpfen vor. Welche Rolle spielt dabei die Maillard-Reaktion für mein Profil und wie verändert das die Balance, wenn gleichzeitig eine säurebetonte Sauce im Spiel ist?</span>
* Die 'Warum'-Frage beim Abschmecken: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">In der heutigen Fisch-Sauce hast du Kapernwasser und kalte Butter kombiniert. Warum hast du dich für diese spezifische Säurequelle entschieden und nicht für den Zitronensaft, den ich sonst oft verwende? Was bewirkt dieser Unterschied im Mundgefühl?</span>
* Profil-Extraktion: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Analysiere die letzten zehn Rezepte, die wir gemeinsam gekocht haben. Welche drei kulinarischen Grundprinzipien ziehen sich wie ein roter Faden durch diese Gerichte und wie könnte ich diese Prinzipien anwenden, wenn ich einmal völlig ohne KI-Hilfe ein improvisiertes Essen zubereite?</span>
== 6. Welcher Chatbot eignet sich am besten? ==
[[Datei:Dish based on an AI-generated cooking recipe 01.jpg|thumb|Nach einem Chatbot-Rezept gekocht: „South-Asian Heat“ Sirloin, mit Steak, fein gewürfelten, gebackenen Kartoffeln, grünen Bohnen, Spinat und Kapernäpfeln; gewürzt u.a. mit Tamarindenpaste, Gochujang und Fischsauce]]
Die Wahl des Chatbots beeinflusst den Workflow maßgeblich, da die Modelle auf unterschiedliche Daten spezialisiert sind. Gemini z.B. wirkt oft wie ein Praktiker, der massiv mit Inhalten aus Kochforen trainiert wurde und bei Warenkunde sowie pragmatischer Küchenlogistik glänzt. „Intellektuellere“ Modelle wie Claude, deren Fokus eher auf wissenschaftlichen oder literarischen Texten liegt, erweisen sich in der direkten Küchenpraxis oft als weniger intuitiv.
Trotzdem sollte der Benutzer selbst experimentieren, um herauszufinden, welche KI-Mentalität sich am besten in den persönlichen Workflow einfügt. Ein direkter Vergleich desselben Auftrags in verschiedenen Systemen offenbart schnell, ob man eher die logische Schärfe eines Strategen oder die pragmatische Erfahrung eines virtuellen Kochbuchs benötigt – die Letztentscheidung bleibt eine Frage des individuellen Stils.
== 7. Grenzen und Fallstricke ==
KI-gestütztes Kochen ist keine Magie, sondern ein logistisches Werkzeug. '''Die Methode ersetzt keine Kochkompetenz, sondern setzt sie voraus''': Wer weiß, wie ein Gericht schmecken sollte, erkennt Fehler im Entwurf sofort.
Die KI hat keinen Geschmackssinn und keine Augen. Sie weiß nicht, wie reif die Tomate oder wie scharf das Messer ist. Auch in Fragen der Lebensmittelsicherheit (Garzeiten bei Geflügel, Kühlketten) ist gesunder Menschenverstand obligatorisch.
Ein gedrucktes Kochbuch hat dieselben Schwächen – es kennt weder den Herd des Benutzers noch seine Abneigungen. Der entscheidende Vorteil der KI ist ihre '''Interaktivität''': Sie ist korrigierbar und passt sich im Dialog an. Wer die KI als lernfähigen Assistenten begreift, statt ihr blind zu vertrauen, wird die erheblichen Vorteile der Methode schnell für sich nutzen.
=== Was die KI nicht weiß — aber erfahren kann ===
[[File:Chicken eggs 21.jpg|thumb|Welche Eiergröße ein Benutzer als Standard ansieht, kann die KI nur wissen, wenn er ein solches Ei auswiegt und ihr das Ergebnis mitteilt.]]
Manche Wissenslücken der KI sind nicht struktureller, sondern biographischer Natur: Sie kennt die spezifische Realität des Benutzers schlicht noch nicht. Das ist kein Systemfehler, sondern ein Startzustand — einer, der sich durch explizite Eingaben ins Küchenprofil oder durch iterative Kalibrierung im Laufe der Zusammenarbeit zunehmend schließt.
==== Zutatengewicht und -größe ====
Die KI rechnet mit Standardgrößen — ein „Ei" ist für sie ein Ei mittlerer Größe, eine „Zwiebel" eine mittelgroße Zwiebel, eine „Kartoffel" eine von etwa 150 g. Was „mittlere Größe" konkret bedeutet, variiert jedoch je nach Land und Einkaufsquelle erheblich. Wer gewohnheitsmäßig große Eier kauft, kleine Schalotten verwendet oder besonders schwere Kartoffeln vorrätig hält, bekommt Rezepte, deren Mengenverhältnisse still vom Tatsächlichen abweichen. Besonders anfällig sind Zutaten, bei denen Größe und Gewicht stark variieren: Eier, Kartoffeln, Zwiebeln und Schalotten, Zucchini, Auberginen, Äpfel und Birnen, Hähnchenteile sowie Fischfilets. Die Lösung: diese Zutaten einmal wiegen und die Werte als Standardangaben ins Küchenprofil aufnehmen.
==== Kochkompetenz und Technik ====
[[File:Filleting bluefish.jpg|thumb|Das Filetieren von Fisch ist eine anspruchsvolle Technik, die nicht bei jedem Anfänger vorausgesetzt werden kann.]]
Die KI kann die tatsächliche Fingerfertigkeit des Benutzers nicht einschätzen — aber sie kann es lernen. Wer ihr nach einem misslungenen Versuch mitteilt, dass Emulsionen für ihn regelmäßig brechen oder dass panierter Feta in der Pfanne zerfällt, erhält künftig Vorschläge, die diese Grenzen respektieren oder gezielt Techniken empfehlen, die sie überwinden helfen. Schwierigkeitsgrade, die die KI zunächst nur abstrakt bewertet, werden durch solches Feedback konkret und personalisiert.
Alternativ kann der Benutzer die KI auch bitten, mit ihm ein Assessment durchzuführen, und dessen Ergebnis ins Küchenprofil aufnehmen.
==== Kalibration & Hardware ====
Auch das Verhalten eines konkreten Geräts lässt sich ins Profil einarbeiten: ob der Ofen oben stärker heizt, ob die angezeigten 180 °C tatsächlich erreicht werden, ob eine bestimmte Pfanne Hitze ungleichmäßig verteilt. Mit solchen Angaben werden Garzeiten und Temperaturempfehlungen der KI präziser. Was sie jedoch nie ersetzen kann: die direkte sensorische Kontrolle am Gerät. Bräunung, Textur und Gargrad müssen vom Benutzer eigenständig geprüft werden — unabhängig davon, wie gut die KI über seinen Ofen informiert ist.
=== Übergehorsame Befehlsanwendung ===
Die größte Stärke der KI – ihre Bereitschaft, jeden Befehl umzusetzen – ist gleichzeitig ihre größte Schwäche. Hier einige Beispiele:
==== Der Würzfehler: wenn Präzision zur Kumulation wird ====
Die KI führt Skalierungsanweisungen ohne kulinarisches Urteil aus. Wer „verdopple die Sauce" sagt, bekommt die doppelte Menge — auch wenn die Sauce extrem salzig, scharf oder fettig ist und die Balance des Gerichts dabei kippt. Dasselbe Muster zeigt sich bei der Kombination mehrerer intensiver Komponenten: Wenn der Benutzer gleichzeitig Gochujang, Chipotle und frische Chilischoten anfordert, setzt die KI alle drei um, ohne zu prüfen, ob das Ergebnis noch genießbar ist. Sie optimiert auf Befehlstreue, nicht auf Geschmack.
Die Lösung ist eine Würzdisziplin-Regel im Küchenprofil, die der KI eine konkrete Obergrenze setzt und sie zur aktiven Kumulations-Kontrolle verpflichtet. Beispiel: <span style="color:#2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Bei jedem Rezept darfst du den Salzgehalt — summiert über alle salzhaltigen Zutaten wie Sojasauce, Fischsauce, Miso, Kapern, Sardellen und Salz selbst — 1,5 g Natrium pro Portion nicht überschreiten. Wenn mehrere scharfe, salzige oder fettreiche Komponenten zusammenkommen, weise mich auf den kumulativen Effekt hin und schlage vor, welche Komponente reduziert oder weggelassen werden sollte. Skalierungsanfragen für einzelne Zutaten oder Saucen führe nicht mechanisch aus, sondern prüfe, ob die Balance des Gerichts dabei erhalten bleibt.</span>
==== Der Personalisierungsfehler: wenn das Profil zur Falle wird ====
[[File:Dioscorea polystachya (batatas).jpg|thumb|Nagaimo]]
Ein gut entwickeltes Geschmacksprofil birgt eine subtile Gefahr: Die KI kann so konsequent auf die bekannten Vorlieben des Benutzers optimieren, dass sie eine unbekannte Zutat ihrer kulinarischen Identität beraubt, bevor der Benutzer überhaupt die Chance hatte, sie kennenzulernen.
Ein Beispiel: Ein Benutzer kauft Nagaimo — eine japanische Bergkartoffel, die in der traditionellen Küche wegen ihrer ausgeprägten Schleimigkeit geschätzt wird, die beim Reiben eine fast klebrige, fließende Textur entwickelt. Diese Eigenschaft ist keine Schwäche, sondern das Wesen der Zutat: Sie gibt dem japanischen Gericht Tororo seinen charakteristischen, seidigen Schmelz, sie macht Okonomiyaki elastisch und luftig, sie bindet Teige auf eine Art, die kein anderes Bindemittel replizieren kann. Ein Geschmacksprofil, das Schleimigkeit als Abneigung verzeichnet und Krossheit bevorzugt, wird die KI wahrscheinlich dazu veranlassen, aus dem Nagaimo gebackene Fritten zu machen — was technisch durchführbar ist, aber die Zutat auf ein Ergebnis reduziert, das von gewöhnlichen Kartoffelfritten geschmacklich nicht zu unterscheiden ist. Der seltene Fund wird verschenkt.
Die Lösung ist eine Authentizitätsregel für den Erstkontakt, die man als explizite Anweisung ins Küchenprofil aufnehmen kann. Beispiel: <span style="color:#2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wenn wir eine Zutat zum ersten Mal verwenden — insbesondere etwas Ethnisches, Seltenes oder außerhalb des normalen Supermarktsortiments — darfst du mir nur Rezepte vorschlagen, die eine möglichst große Annäherung an traditionelle Zubereitungsweisen bilden. Du sollst dies auch dann tun, wenn das Ergebnis mit meinem Geschmacksprofil nicht oder nicht vollständig übereinstimmt. Wenn immer eine solche Abweichung besteht, sollst du mich aber ausdrücklich darauf hinweisen und genau beschreiben, welche Eigenschaften — z.B. Schleimigkeit, Bitterkeit, intensive Fermentationsaromen, ungewohnte Texturen — diese Zutat bei traditioneller Zubereitung mitbringt.
</span>
==== Der Ästhetikfehler: wenn die KI das Auge vergisst ====
Manche Zutaten sind mehr als ihre Aromen und Texturen — sie sind visuell. Ihr eigentliches Potenzial erschließt sich erst auf dem Teller, in einer bestimmten Schnittform oder durch ein bestimmtes Anrichten. Eine KI ohne Augen weiß zwar, was eine Zutat ist — aber nicht, wie sie aussieht, und damit auch nicht, warum eine bestimmte Zubereitungsweise sie zu etwas Besonderem macht.
Dieses Problem hat zwei Dimensionen. Die erste betrifft die Form: Lotuswurzel etwa entfaltet in Scheiben geschnitten eine fast ornamentale Wirkung — das netzartige Muster der Hohlkanäle macht jede Scheibe zu einem kleinen ästhetischen Ereignis auf dem Teller. Eine KI behandelt sie nach rein funktionalen Kriterien und schneidet sie in Stifte, weil Stifte bei Pfannengerichten eine bewährte Form sind. Kulinarisch nicht falsch — aber das Besondere der Zutat ist verschenkt. Die zweite Dimension betrifft die Farbe: Die KI kombiniert Zutaten nach Geschmack und Textur, ohne zu sehen, ob auf dem Teller drei verschiedene Brauntöne aufeinandertreffen oder ob ein einzelnes farbiges Element das ganze Gericht visuell rettet. Gerichte, die fantastisch schmecken, können optisch vollständig misslingen — und die KI bemerkt es nicht.
Das Problem ist strukturell: Was sie über das Aussehen einer Zutat weiß, ist sprachlich kodiertes Wissen — und das bleibt abstrakt, solange es nicht mit expliziter Anweisung in die Rezeptlogik eingespeist wird.
Die Lösung ist eine Visualisierungsregel im Küchenprofil. Beispiel: <span style="color:#2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wenn eine Zutat eine charakteristische Schnittästhetik oder visuelle Eigenschaft besitzt — wie die Querschnittstruktur von Lotuswurzel, die Marmorierung von Fleisch oder die Lamellen von Pilzen — sollst du diese in der Zubereitung aktiv berücksichtigen. Darüber hinaus sollst du bei jedem Rezept die Farbkomposition des fertigen Tellers mitdenken: Droht Monochromie, weise mich darauf hin und schlage ein gezieltes Farbelement vor — eine frische Kräutergarnitur, eine kontrastierende Sauce, eine anders gefärbte Beilage. Falls du dir über die visuelle Qualität einer Zutat unsicher bist, frage nach.</span>
=== Weitere typische Fehler ===
; Garzeiten: Die KI geht von Durchschnittswerten aus (Standard-Ofen, 180g-Filet). Da sie die reale Küche des Benutzers nicht sieht, sind Garzeiten immer nur Richtwerte. Der Benutzer muss sich auf sein Handwerk verlassen: Bräunung und Textur müssen eigenständig geprüft werden.
; Abschmecken: Die KI kalkuliert Würzintensität theoretisch, schmeckt aber nicht ab. Da Naturprodukte wie Chilischoten in ihrer Schärfe stark schwanken und salzhaltige Zutaten sich kumulativ addieren, sind alle Mengenangaben Richtwerte. Das schrittweise Hinzufügen und finale Abschmecken bleibt eine exklusive menschliche Aufgabe.
; Diätische und kulinarische Regeln: Die KI neigt dazu, rezeptspezifische Wünsche als generelle Profileigenschaften zu verbuchen. Wer für ein einzelnes Gericht „ohne Salz" oder „ohne Fett" anfordert, riskiert, dass die KI diese Vorgabe auf alle folgenden Rezepte überträgt. Im Zweifel den Geltungsbereich explizit benennen: „nur für dieses Rezept".
; Kontext & Konsistenz: In langen Chats kann die KI Details „vergessen“ (Kontextverlust) oder die Zutatenliste widerspricht der Anleitung (Inkonsistenz). Solche logischen Brüche fallen bei der Durchsicht vor dem Kochen sofort auf. Ein kurzes Nachhaken korrigiert das Rezept meist unmittelbar.
== Siehe auch ==
* [[Kochbuch]]
* [[Grundlagen der Ernährung]]
[[Kategorie:Buch]]
91u8xou1f4exc4dohbbcbsuqy6zawln
1088537
1088536
2026-07-01T19:27:45Z
Stilfehler
1981
/* Kalibration & Hardware */
1088537
wikitext
text/x-wiki
[[File:Dish based on an AI-generated cooking recipe 04.jpg|thumb|Ein auf einem KI-generierten Rezept basierendes 1-Pfannen-Gericht: Marinierter Lachs und Edamame auf Blumenkohlreis, mit Pistazien und krossem Speck (Würzung: eklektisch südostasiatisch)]]
'''Personalisiertes Kochen mit dem Chatbot''' – Ein Leitfaden für den KI-gestützten Küchenalltag
Was wäre, wenn jemand, der deinen Kühlschrank kennt und deinen Geschmack versteht, dir täglich Anregungen und maßgeschneiderte Rezepte für das geben könnte, was heute auf den Tisch kommt, und dabei mit der Zeit immer besser wird?
== 1. Der personalisierte Küchenassistent ==
<div style="background:powderblue";>
Kochbücher und Rezeptportale bieten eine schier unerschöpfliche Auswahl an Gerichten — aber sie wissen nicht, was im Kühlschrank, im Vorratsschrank und im Gewürzregal steht, sie kennen weder die Geschmackspräferenzen noch die Küchengeräte des Benutzers, und sie können nicht auf die Frage antworten, was man mit einer angebrochenen Dose Kichererbsen, einem Rest Joghurt und einem Bund Petersilie anfangen soll, der morgen nicht mehr frisch sein wird. Genau hier setzt dieser Leitfaden an.
Bei dem hier beschriebenen Ansatz wird der KI-Chatbot nicht als Nachschlagewerk benutzt, sondern als personalisierter Küchenassistent: einer, der das Vorratsregime des Benutzers kennt, mit seinen Abneigungen und Vorlieben vertraut ist, seine Küchenausstattung berücksichtigt, der weiß, wie groß die Portionen sein müssen, und — nach einer Einlernphase — zunehmend treffsichere Vorschläge macht, die tatsächlich zum Benutzer passen. Das Prinzip ist dasselbe, das Musik- und Filmstreamingdienste nutzen, um ihren Nutzern Empfehlungen zu machen: Extrapolation aus erkennbar gewordenen Vorlieben. Der Unterschied ist, dass der Benutzer hier nicht das Ziel einer Marketingstrategie ist — sondern selbst der Nutznießer.
Darüber hinaus sorgt die KI auch noch dafür, dass – bevor Zutaten neu gekauft werden müssen – erst einmal das voll ausgeschöpft wird, was an Vorräten und Resten in einer Küche bereits vorhanden ist.
</div>
=== Was diese Methode vom konventionellen Kochen unterscheidet ===
Die meisten Menschen kochen den Großteil ihrer Mahlzeiten ohne Rezept — aus einem festen Repertoire vertrauter Gerichte, das sich über Jahre kaum verändert. Kochbücher werden gelegentlich aufgeschlagen, meist für besondere Anlässe oder wenn der Wunsch nach etwas Neuem stark genug ist, um die Hürde des Unbekannten zu überwinden. Im Alltag dominiert das Vertraute.
KI-gestütztes Kochen, so wie es dieser Leitfaden beschreibt, macht das Neue zur täglichen Normalität. Weil die KI das vorhandene Inventar kennt und aus ihm schöpft, ist der Aufwand für ein unbekanntes Gericht nicht größer als für ein vertrautes — die Hürde entfällt. Das erlaubt es, buchstäblich jeden Tag etwas zu kochen, das man so noch nie zubereitet hat.
=== Einige Vorteile der Methode ===
[[Datei:Rainbow chard for sale at the Campbell farmers market.jpg|thumb|Einfach mal spontan 1 Zutat kaufen, die interessant aussieht. Die KI wird ein Rezept finden, deren übrige Zutaten alle aus den vorhandenen Beständen (Kühlschrank, Vorratsschrank) kommen.]]
Ökonomisch:
* Vorräte werden systematisch und vollständig genutzt
* Professionelle Problemlösungen bei logistischen Engpässen
* Weniger und effizientere Einkaufsgänge
* Personalisierung der Mengen: die KI berücksichtigt nicht nur die Zahl der Portionen, sondern kann auch damit umgehen, wenn die Portionen größer oder kleiner sein sollen als der Kochbuch-Standard
* Wenn von Zutaten Reste bleiben, werden diese systematisch und vollständig weitergenutzt
Kulinarisch:
* Nur noch Gerichte, die für das eigene Geschmacksprofil optimiert sind
* Tägliche Abwechslung ohne zusätzlichen Aufwand
* Treffsichere Vorschläge neuer Zutaten und Küchen, die zum eigenen Profil passen
* Mehr Freiheit, beim Einkaufen spontan Lebensmittel auszuwählen, die reizvoll aussehen (auch wenn man zunächst nicht weiß, was sich damit anfangen lässt)
* Die KI kombiniert Zutaten und Methoden nicht beliebig, sondern nutzt tiefe Warenkunde für systematische Innovation. Sie bricht Gewohnheiten durch fundierte, algorithmische Logik und erzwingt so kreative Kombinationen, die weit jenseits menschlicher Intuition liegen.
Persönlich:
* Massive Vereinfachung der Küchenplanung
* Selbsterkenntnis: besser verstehen, warum man bestimmte Dinge lieber isst als andere
* Wachsende Kochkompetenz durch niederschwelliges Erlernen neuer Kochtechniken und -praktiken im ganz normalen Küchenalltag
* Unterschiedliche Geschmäcker in Mehrpersonenhaushalten sind kein Problem, sondern ein Ausgangspunkt — die KI findet Gerichte, die verschiedene Vorlieben nicht ignorieren, sondern produktiv miteinander verbinden.
=== Ist das auch gesünder? ===
Dieser Leitfaden ist '''ernährungsphilosophisch neutral'''. Er macht keine Aussagen darüber, was eine gesunde Ernährung ausmacht — das liegt in der Verantwortung jedes Benutzers selbst. Die Methode funktioniert gleichermaßen für Veganer wie für eine mediterrane Vollwertkost wie für Menschen, die gern ''Convenience Food'' verwenden.
Grundlegend tendiert diese Methode aber dazu, weitaus mehr Abwechslung auf den Tisch zu bringen, als dies beim gewöhnlichen Kochen der Fall ist, und damit einer einseitigen Ernährung entgegenzuwirken.
== 2. Datenschutz und Sicherheit ==
[[File:Padlock infront of isolated white background 02.jpg|frameless|right]]
Wer einem Chatbot mitteilt, was er im Kühlschrank hat, welche Gewürze er bevorzugt, welche Lebensmittel er nicht verträgt und ob er vielleicht Kalorien zu reduzieren versucht, gibt persönliche Daten preis — das ist eine Beobachtung, die keine Verharmlosung, sondern eine nüchterne Antwort verdient.
=== Was man tatsächlich preisgibt ===
Das Kochprofil, das dieser Leitfaden empfiehlt, enthält im Wesentlichen Lifestyle-Daten: Vorratsbestände, Geschmackspräferenzen, Küchenausstattung, lokale Einkaufsmöglichkeiten. Es enthält keine Finanzdaten, keine Identitätsdaten, keine Kommunikationsinhalte. Wer dieselbe Abwägung für die Daten vornimmt, die er Google, Amazon oder einem Supermarkt-Bonusprogramm täglich und routinemäßig übergibt — Standortdaten, Suchanfragen, vollständiges Einkaufsverhalten — wird feststellen, dass das Kochprofil typischerweise weniger sensitiv ist als das, was er anderswo längst preisgegeben hat. Das bedeutet nicht, dass die Sorge unberechtigt ist. Es bedeutet, dass sie abgewägt werden sollte.
Heikler als reine Lifestyle-Daten sind Ernährungsanforderungen, die medizinische Diagnosen implizieren, ohne dass der Benutzer das explizit benennt. Eine natriumarme Ernährung verweist auf Bluthochdruck oder Herzerkrankung. Eine FODMAP-reduzierte Ernährung verweist auf Reizdarmsyndrom. Die Vermeidung von Tyramin-reichen Lebensmitteln — Hartkäse, Rotwein, Wurstwaren — verweist auf eine MAO-Hemmer-Medikation. Diese Daten fallen in Europa unter den stärksten Schutzbereich der DSGVO; in anderen Rechtsordnungen ist der Schutz schwächer oder fehlt ganz. Auch hier muss man abwägen, ob und inwieweit die Vorteile, die der personalisierte Küchenassistent bringt, die vermuteten Risiken aufzuwiegen vermögen.
=== Vier Optionen auf einem Sicherheitsspektrum ===
'''Option 1: Cloud-KI mit angepassten Datenschutzeinstellungen'''. Alle großen Anbieter erlauben es, die Verwendung von Gesprächsdaten für das Modelltraining zu deaktivieren. Das reduziert das Risiko erheblich, eliminiert es aber nicht vollständig, da Gespräche für Sicherheits- und Qualitätszwecke temporär gespeichert werden können.
'''Option 2: API-Zugang'''. Wer über die Programmierschnittstelle auf einen Chatbot zugreift, hat in der Regel stärkere Garantien: Die großen Anbieter schließen API-Daten standardmäßig vom Modelltraining. Das setzt allerdings eine gewisse technische Versiertheit des Benutzers voraus.
'''Option 3: Anonymisiertes Profil'''. Das Benutzerprofil enthält per se keinen zwingend identifizierenden Inhalt. Es kann konsequent ohne Namen, ohne präzise Ortsangaben und ohne andere direkt identifizierende Informationen formuliert werden. „In der Nachbarschaft gibt es einen türkischen Lebensmittelladen” ist nicht re-identifizierend. Das Profil kann als anonymes Dokument geführt werden.
'''Option 4: Lokale Sprachmodelle'''. Für Benutzer, die grundsätzlich keine Daten an Cloud-Dienste senden wollen, sind lokal installierte Modelle die konsequenteste Lösung. Kein Byte verlässt das Gerät. Empfehlenswerte Werkzeuge hierfür sind '''LM Studio''' — mit grafischer Benutzeroberfläche, auch für Nicht-Techniker geeignet — sowie '''GPT4All''' und '''Jan''', beide kostenlos und auf Windows, Mac und Linux lauffähig. Als Modelle eignen sich für Kochzwecke auch kleinere Varianten (7 bis 13 Milliarden Parameter), die auf jedem modernen Laptop ohne Spezial-Hardware laufen. Die Modellqualität ist gegenüber den großen Cloud-Diensten etwas geringer, für Rezeptvorschläge jedoch vollständig ausreichend. Der einzige Vorbehalt: Die Erstinstallation erfordert etwas technisches Engagement — ist dieser Schritt aber getan, ist die Bedienung so einfach wie bei einem normalen Chatbot.
=== Einfache Zusatzoption: Das Profil lokal führen ===
Als Alternative zum plattformseitigen Speichern (in den Benutzereinstellungen der KI) empfiehlt sich das Führen des Benutzerprofils als einfache Textdatei auf dem eigenen Computer oder Smartphone — etwa in der Notizen-App, in einem Word-Dokument oder in einem beliebigen anderen Textprogramm.
Das gibt dem Benutzer zusätzliche Kontrolle darüber, was er wann preisgibt — und es löst zugleich ein praktisches Problem: KI-Chatbots haben kein dauerhaftes Gedächtnis. Was in einem langen Chat weit zurückliegt, ist für die KI irgendwann schlicht nicht mehr präsent. Das Profil muss deshalb regelmäßig neu eingegeben werden — spätestens dann, wenn man merkt, dass die KI Präferenzen nicht mehr berücksichtigt, proaktiv alle zehn bis fünfzehn Kochsitzungen.
Wer das Profil als Textdatei auf dem Gerät hat, erledigt das mit zwei Handgriffen: Datei öffnen, Inhalt in das Chatfenster kopieren.
== 3. Das Benutzerprofil ==
[[Datei:Deepin Icon Theme – deepin-contacts.svg|right|rahmenlos]]
Das Benutzerprofil ist das Fundament der gesamten Methode. Ohne dieses Element bleibt die KI ein generisches Nachschlagewerk — erst das Profil macht sie zum personalisierten Küchenassistenten, der weiß, womit und für wen er arbeitet.
Das Benutzerprofil besteht aus zwei Teilen. Das '''Küchenprofil''' erfasst die sachlichen, objektiven Parameter: was ständig vorhanden ist, was ausgeschlossen ist, welche Geräte zur Verfügung stehen, was eingekauft werden kann. Das '''Geschmacksprofil''' erfasst die subjektiven, dynamischen Parameter: was dem Benutzer schmeckt, was nicht, und wie sich seine Vorlieben im Laufe der Zeit entfalten.
=== Das Küchenprofil ===
==== Was ist ein Küchenprofil? ====
Unter einem Küchenprofil verstehen wir hier die Gesamtheit der Informationen, die ein Küchenassistent über die Situation in einem Haushalt braucht, damit er effizient arbeiten kann. Lediglich die Informationen über die geschmacklichen Vorlieben des Benutzers und der Mitglieder seines Haushalts werden nicht im Küchenprofil, sondern [[#Das Geschmacksprofil|anderswo]] verwaltet.
Hier eine Liste von Parametern, aus denen das Küchenprofil sich zusammensetzen kann:
[[File:Spice rack, 2014.jpg|thumb]]
; Dauervorräte: Zutaten, die ständig verfügbar sind, weil ihre Vorräte, wenn sie zur Neige gegen, routinemäßig wieder aufgestockt werden:
: ''Gewürzinventar'': Der diagnostisch wertvollste Teil des gesamten Profils. Wer der KI mitteilt, dass er Harissa, Sumach, geräuchertes Paprikapulver, Kecap Manis und Szechuanpfeffer im Schrank hat, kommuniziert damit ein Geschmacksprofil, das die KI sofort und präzise interpretieren kann — aussagekräftiger als jede abstrakte Beschreibung von Vorlieben.
: ''Fensterbank-Kräuter'';
: ''Gemüsekorb'': Kartoffeln, Zwiebeln, Schalotten, Knoblauch, Ingwer, Tomaten und andere frische Zutaten, die man immer im Haus hat, die aber nicht in den Kühlschrank gehören;
: ''Vorratsschrank'': Öle und Essige, Konserven, Hülsenfrüchte, Getreide und Pasta, Nüsse und Trockenfrüchte, Saucen und Pasten;
: ''Dauervorrat Kühlschrank'': Milchprodukte, Eier, Condiments, Aufschnitt oder andere Kühlwaren, die regelmäßig nachgekauft werden;
: ''Tiefkühlschrank'': Gemüse, Kräuter, Fleisch, Meeresfrüchte und andere Zutaten, die man tiefgekühlt ständig vorrätig hält; die KI kann ausgezeichnet auch mit Convenience Food wie z.B. tiefgefrorenem Gyros arbeiten.
; Saisonale Ressourcen: Zutaten, die nur in bestimmten Monaten leicht verfügbar sind, etwa weil sie aus dem eigenen Garten kommen.
; Ausschlusslisten: Abneigungen gegen bestimmte Zutaten, Allergien, Unverträglichkeiten, ethische, religiöse oder diätische Einschränkungen.
; Positivlisten: Zutaten, die vor anderen bevorzugt werden (z.B. „Möglichst oft etwas mit Kartoffeln oder Vollkorn.“).
[[File:20051018Épicerie d'Amélie Poulain 2.jpg|thumb]]
; Einkaufsressourcen: Welche Läden sind in der Nähe, und worauf sind sie spezialisiert? Ein türkischer Lebensmittelladen ermöglicht andere Rezeptvorschläge als ein osteuropäischer, ein asiatischer Supermarkt andere als ein hispanischer Tiendita. Diese Information erlaubt der KI, bei Bedarf Zutaten in den Vorschlag einzubeziehen, die über das Standardsortiment eines Supermarkts hinausgehen — und die den Benutzer geschmacklich bereichern können.
; Küchengeräte und Utensilien: Hier genügt es, über das Basisequipment hinaus zu inventarisieren — Herd, Backofen, Messer und Töpfe darf die KI als selbstverständlich voraussetzen. Was sie wissen sollte, sind Geräte, die besondere Zubereitungsarten ermöglichen oder einschränken: Dampfgarer, Sous-vide-Gerät, Standmixer, Stabmixer, Reiskocher, Gusseisenpfanne, Wok, Tajine, Dutch Oven, Pizzastein und ähnliches. Wenn möglich, lohnt sich die Angabe relevanter Leistungsparameter — etwa die maximale Wattzahl eines Stabmixers oder die Größe des Backofens — damit die KI einschätzen kann, was ein Gerät tatsächlich leisten kann. Wenn man das Modell genau bezeichnet, ist die KI manchmal sogar schlauer als der Benutzer, was das Gerät genau leisten kann.
Zweckmäßig ist es, im Küchenprofil auch auch die '''Grundeinstellungen der Sitzungsparameter''' anzugeben, also diejenigen Informationen beispielsweise zur Zahl der benötigten Portionen, mit denen die KI im Regelfall arbeiten soll. Mehr dazu [[#Sitzungsparameter|weiter unten]].
==== Wie man das Küchenprofil erstellt und was man dann damit macht ====
Wenn man den neuen Chat, den man künftig zum Kochen verwenden wird, anlegt, ist das Küchenprofil zweckmäßigerweise eines der ersten Dokumente, die man der KI übergeben sollte. Es braucht nicht von Anfang an vollständig zu sein, sondern kann nach und nach vervollständigt werden – ein gut gepflegtes Profil macht aber den Unterschied zwischen generischen Rezeptvorschlägen und solchen, die dem Benutzer das Leben tatsächlich einfacher machen.
Damit man auf das Küchenprofil stets einfach zugreifen kann, ist es zweckmäßig, es nicht direkt in die KI einzutippen, sondern es separat davon in einem Texteditor zu erstellen. Dort kann man es nach Bedarf jederzeit lesen, bearbeiten, ergänzen und aktualisieren. Dann überträgt man es entweder mit Kopieren+Einfügen oder per Hochladen in die KI. Falls das Gedächtnis der KI später, nach einigen Sitzungen zu schwächeln beginnt, übergibt man das Küchenprofil einfach erneut.
=== Das Geschmacksprofil ===
[[File:Banchans.jpg|thumb]]
Das Geschmacksprofil unterscheidet sich grundlegend von allen anderen Teilen des Benutzerprofils. Während Gewürzinventar, Küchengeräte und Ausschlussliste statische Fakten sind, die einmal erfasst und gelegentlich aktualisiert werden, ist das Geschmacksprofil ein '''lebendes Dokument''' — eines, das nie wirklich abgeschlossen ist und das mit jeder Kochsitzung präziser wird. Es ist zugleich der Teil des Profils, den manche Benutzer vielleicht am schwierigsten finden werden, weil er eine Art Selbstkenntnis voraussetzt, die man oft erst im Dialog mit der KI entwickelt.
==== Dimensionen des Geschmacks ====
Hier einige Dimensionen des Geschmacks, die nach und nach ins Benutzerprofil eingehen sollten:
; Ethnische Küchen und Kochtraditionen: Welche Küchen der Welt sprechen den Benutzer an? Das muss keine erschöpfende Liste sein — oft genügt es, einige Affinitäten zu benennen und einige Abneigungen. Eine Vorliebe für japanische und peruanische Küche bei gleichzeitiger Skepsis gegenüber sehr fetthaltigen nordeuropäischen Gerichten ist bereits eine präzise und nützliche Angabe. Die KI kann daraus nicht nur Rezeptvorschläge ableiten, sondern auch Querverbindungen herstellen — etwa Techniken aus einer Küche auf Zutaten einer anderen anwenden.
; Geschmacksbalance: Die fünf Grundgeschmäcker — salzig, sauer, süß, bitter, umami — treten in jedem Gericht in einem bestimmten Verhältnis auf. Manche Benutzer bevorzugen klar dominante Profile, andere schätzen komplexe Gleichgewichte. ''Eine Vorliebe für ausgeprägte Säure, kombiniert mit Umami-Tiefe und wenig Süße'', ist eine Information, die die KI unmittelbar in die Rezeptauswahl einfließen lässt.
; Aromarichtungen: Wie intensiv darf ein Gericht gewürzt sein? Welche Rolle spielen Schärfe, Kräuterintensität, Rauchigkeit, Fermentiertes, Bitteres? Wer der KI mitteilt, dass er großzügigen Gebrauch von frischen Kräutern schätzt, Schärfe bis zu einem bestimmten Grad liebt und Rauchigkeit als willkommene Hintergrundnote empfindet, gibt ihr ein Koordinatensystem, das weit präziser ist als eine allgemeine Aussage wie „ich mag würziges Essen”.
; Texturpräferenzen: Textur ist eine der am häufigsten unterschätzten Geschmacksdimensionen. Wer knusprige Oberflächen liebt, wer cremige Konsistenzen bevorzugt, wer Bissfestigkeit schätzt oder wer bestimmte Texturen — etwa mehlige Konsistenz oder sehr weiches Fleisch — als unangenehm empfindet, sollte das im Profil festhalten. Ebenso relevant ist die Frage, ob Texturkontraste in einem Gericht willkommen sind — etwa knusprige Einlagen in einer cremigen Suppe — oder ob Homogenität bevorzugt wird.
==== Die Ermittlung des Geschmacksprofils als iterativer Prozess ====
[[Datei:Dish based on an AI-generated cooking recipe 12.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Pfannengerührte Shrimps mit Ei und Spinat auf schwarzem Perlreis mit marinierten Knoblauchstengeln, gewürzt u.a. mit Gochujang und Spicy Chili Crisp]]
Am Anfang wird das Geschmacksprofil zwangsläufig unvollständig und unscharf sein — das ist normal und kein Mangel. Die KI braucht vom Benutzer, um nützlich zu sein, keine perfekte Selbstbeschreibung. Sie braucht nur einen Ausgangspunkt, an dem sie ihre Arbeit beginnen kann.
Die wenigsten Menschen haben Übung darin, in Worten exakt auszudrücken, warum sie bestimmte Zutaten, bestimmte Zubereitungsweisen und bestimmte Gerichte mögen oder nicht mögen. Aber auch wenn die KI das Geschmacksprofil eines Benutzers am Anfang noch nicht kennt, hat sie mehrere Mittel, um es zu erforschen:
; Rezeptauswahl als Signal: Jedes Mal, wenn der Benutzer aus mehreren Vorschlägen einen auswählt und die anderen verwirft, teilt er der KI etwas über seine Präferenzen mit — auch wenn er das nicht explizit formuliert.
; Rezept-Modifikation als Signal: Wenn die KI ein Rezept vorschlägt, wird der Nutzer manchmal eingreifen: „geht das auch ohne Knoblauch?", „lieber Zitrone als Essig", „nein, keine Sahne – lieber Kokosmilch". Auch damit verrät er der KI oft mehr über seinen Geschmack, als ihm bewusst ist.
; Post-cook-Review: Wenn ein Gericht besonders gut war, oder im Gegenteil nicht gefallen hat, sollte die KI das unbedingt erfahren. „Zu säuerlich für meinen Geschmack, die Textur war perfekt, die Kombination Koriander und Limette würde ich gerne öfter sehen” ist eine außerordentlich informationsreiche Aussage, die das Profil unmittelbar verfeinert.
Im Laufe von Wochen und Monaten entsteht so ein '''kollaboratives Geschmacks-Profiling''': die KI nähert sich den tatsächlichen Präferenzen des Benutzers iterativ an, oft weitaus präziser, als es dem Benutzer selbst möglich wäre, sie von vornherein zu beschreiben.
In '''Mehrpersonenhaushalten''' fällt das Urteil häufig nicht einhellig aus. Damit die KI gezielt nach Kompromissen forschen kann, sollte sie möglichst genaue Information darüber erhalten, wer was gemocht oder nicht gemocht hat: z.B. „Die Schärfe durch das Gochujang war für mich ideal, führte aber bei M. zum sofortigen Abbruch; R. schlägt vor, die Schärfe künftig über ein separates Topping zu lösen.“
==== Beschleunigtes Geschmacksprofiling ====
[[File:Dish based on an AI-generated cooking recipe 02.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Pacific Rim Surf & Turf Bowl, mit fein geschnittenem Steak, Jacobsmuscheln, Jicama, Anaheim-Chili, Edamame, Koriander und Avocado]]
Wer ungeduldig ist und das Geschmacksprofiling nicht einfach seinem natürlichen Verlauf überlassen will, kann den Prozess durch verschiedene Maßnahmen beschleunigen:
* Die '''Auswahl begründen''': Die KI bietet zu Beginn jeder Kochsitzung typischerweise drei Rezeptvorschläge zur Auswahl an, von denen man einen auswählt. Wer der KI seine Entscheidung nicht einfach nur mitteilt, sondern sie auch ''kommentiert'', liefert ihr damit wertvolle zusätzliche Profilinformation.
* '''Lieblingsgerichte nennen''': Eine Liste von Gerichten, die man besonders gern mag — möglichst mit kurzer Beschreibung oder Rezept — ist für die KI ein außerordentlich ergiebiges Ausgangsmaterial, aus dem sie das Geschmacksprofil unmittelbar herausarbeiten kann.
* Ein '''strukturiertes Assessment''' durchführen: Der Benutzer fordert die KI auf, ihm gezielte Fragen zu stellen, um sein Geschmacksprofil herauszuarbeiten. Das kann man entweder dialogisch machen oder mit Hilfe eines Fragebogens, den man den Chatbot erstellen lässt.
----
<div class="toccolours mw-collapsible mw-collapsed">
<div style="font-weight:bold;line-height:2.6;">Hier ein Beispiel, wie so ein Fragebogen aussehen kann.</div>
<div class="mw-collapsible-content">
<div style="color:purple;">
''Die folgenden Fragen können helfen, eine Bestandsaufnahme der Vorlieben eines Benutzers für Geschmacksrichtungen, Aromen und Texturen vorzunehmen. Ob jemand Fenchel mag oder verabscheut, ob er Saures angenehm oder unangenehm findet und ob er Krosses oder Cremiges bevorzugt, ist etwas, das nur einem selbst gehört und das niemals Gegenstand eines Werturteils sein kann. In Geschmacksfragen gibt es kein Richtig und kein Falsch. Auch in einem Assessment des Geschmacksprofils gibt es darum keine richtigen oder falschen Antworten.''
''Wer möchte, kann diesen Fragebogen gern mit Paste&Copy in eine Textverarbeitung übertragen, ausfüllen und dann – mit der Bitte um Auswertung – einem Chatbot seines Vertrauens übergeben.''
1. Erinnere dich an die schlimmsten Gerichte deiner Kindheit (Oma, Schulkantine, Ferienlager). Was wurde dir zugemutet? Beschreibe nicht nur, was es war, sondern auch: War es das schleimige Mundgefühl? Die bittere Note? Die Zähigkeit? Die völlige Abwesenheit von Textur? Lass deiner Wut beim Schreiben freien Lauf.
2. Wenn du einen Bissen von einem Gericht in den Mund nimmst, was suchst du physiologisch?
:[ ] Den harten, fast anstrengenden Widerstand (wie bei einer krustigen Brotrinde oder Nüssen).
:[ ] Das zarte, schmelzende Gefühl (wie bei einer Mousse oder weichem Risotto).
:[ ] Den "Snap" (wie bei einer knackigen Garnele oder einer frischen Paprika).
: Was mir dazu auch noch einfällt:
3. Stell dir eine Textur vor, die glatt, weich und fast flüssig ist (z.B. eine pochierte Auster, eine weiche Okra-Schote oder ein sehr weicher Tofu). Was empfindest du:
:[ ] Faszinierend, dieses schmelzende, glitschige Gefühl ist ein Highlight.
:[ ] Absolutes No-Go; mein Essen braucht Struktur und darf nicht „ausweichen“.
: Was mir dazu auch noch einfällt:
4. Du landest schiffbrüchig auf einer einsamen Insel. Vom sinkenden Schiff konntest du nur eine aromatische Komponente mitnehmen. Salz ist kein Thema, das gewinnen wir aus dem Meer. Was rettet deine Lebensfreude?
:[ ] Die pure Hitze (Chili, scharfer Pfeffer).
:[ ] Die ätherische Tiefe (Knoblauch, Zwiebelgewächse).
:[ ] Die krautige Frische (Koriander, Minze, Basilikum).
:[ ] Die erdige Wärme (Kreuzkümmel, Kurkuma, Zimt).
: Was mir dazu auch noch einfällt:
5. Eine Zitrone wird direkt vor dir aufgeschnitten. Was passiert in deinem Kopf?
:[ ] „Erfrischend, direkt ein bisschen Saft übers Essen für den nötigen Zing!“
:[ ] „Oh Gott, mir zieht’s alles zusammen, unvorstellbar, das in den Mund zu nehmen!“
: Was mir dazu auch noch einfällt:
6. Manche Menschen lieben dunkle Aromen, die durch lange Reifung oder Konzentration entstehen – man nennt das „Umami“. Denke an den intensiven Kern eines alten Parmesans, die dunkle Würze einer über Stunden eingekochten Fleischsauce (Demi-Glace), die Aromatik von Sardellen oder die Tiefe von Sojasauce und Miso.
:[ ] Je intensiver und „dunkler“, desto besser. Das ist die wahre Tiefe.
:[ ] Ich mag es lieber sauber, frisch und eindeutig erkennbar.
: Was mir dazu auch noch einfällt:
7. Wie muss dein Teller am Ende aussehen?
:[ ] Die Sauce ist ein dezenter Begleiter, der die Hauptdarsteller nur glänzen lässt.
:[ ] Ich brauche eine „Suppen-Ästhetik“; die Beilagen müssen in Sauce baden.
: Was mir dazu auch noch einfällt:
8. Wie darf Fett in deinem Essen vorkommen?
:[ ] Sichtbar und pur (die dicke Ölschicht auf dem Pesto, das Stück Butter auf der Backkartoffel, der Fettrand am Fleisch).
:[ ] Nur emulgiert und versteckt (in einer cremigen Sauce oder im Teig).
: Was mir dazu auch noch einfällt:
9. Dein Essen ist knallgrün vor lauter frisch gehackten Kräutern. Dein Impuls?
:[ ] „Großartig, das bringt Komplexität und Frische!“
:[ ] „Hilfe, das schmeckt bestimmt wie Rasenschnitt!“
: Was mir dazu auch noch einfällt:
10. Im Kino wandert deine Hand blind in eine Schüssel. Was hoffst du zu finden?
:[ ] Etwas, das laut kracht und salzig ist (Chips, geröstete Kerne).
:[ ] Etwas Klebrig-Süßes, das den Kiefer beschäftigt (Karamell, Trockenfrüchte).
:[ ] Etwas Prickelnd-Saures (saure Fruchtgummis, eingelegtes Gemüse).
: Was mir dazu auch noch einfällt:
11. Du nimmst einen Löffel Nutella oder Honig pur aus einem Glas.
:[ ] Ich genieße die pure Befriedigung und könnte noch einen zweiten Löffel nehmen.
:[ ] Ich brauche danach sofort einen starken Espresso oder ein Glas Wasser zum Neutralisieren.
: Was mir dazu auch noch einfällt:
12. Vergiss Wasser – was ist dein bevorzugter „Gegenspieler“ zu einem komplexen Gericht?
:[ ] Etwas mit viel Kohlensäure und Süße (Limo, Cola).
:[ ] Flüssiges Obst (Apfelsaft, Karottensaft, Pfirsichnektar)
:[ ] Etwas Herbes/Bitteres (Bier, Tonic Water, schwarzer Tee/Kaffee).
:[ ] Etwas Säurebetontes (Wein, Schorle, Kombucha).
: Was mir dazu auch noch einfällt:
13. Welches Lebensmittel oder welche Kombination hat dich in deinem Leben am meisten positiv überrascht? (Z.B. Algen, Sashimi, Chili mit Schokolade, Wassermelone mit Feta).
14. Gibt es Lebensmittel, die zwar technisch „gut“ zubereitet sind, bei denen du aber einfach körperlich streikst?
15. Was ich über meine Geschmackspräferenzen sonst noch mitteilen möchte, das ich in diesem Fragebogen bisher noch nicht habe unterbringen können.
</div>
</div></div>
----
In '''Mehrpersonenhaushalten''' empfiehlt es sich, das Assessment für jeden getrennt durchzuführen — denn auch wenn gemeinsam gekocht wird, sind die Geschmacksprofile der Beteiligten selten identisch. Sie können leicht abweichen oder erheblich. Eine KI, die über diese Unterschiede im Bilde ist, kann bei der Rezeptauswahl helfen, sie zu überbrücken — und schlägt Gerichte vor, die verschiedene Präferenzen unter einen Hut bringen, statt routinemäßig nur einem Profil zu folgen.
==== Wozu? Ich weiß über meinen Geschmack doch jetzt schon mehr, als mir lieb ist. ====
[[Datei:Dish based on an AI-generated cooking recipe 11.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Geröstetes Schweinefilet mit Shiitake und einer Tamarinden-Ingwer-Reduktion auf Spinat-Sorghum, gewürzt u.a. mit Knoblauch und Noilly Prat]]
; Frage an die KI: <span style="color:#2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Es kostet mich Überwindung, aber hier einmal die reine Wahrheit: Mein größtes Glück ist es, mir am Abend eine Tiefkühlpizza zu backen, Dr. Oetker, die mit Salami. Weil die Coke Zero, die ich dazu trinke, mein Verlangen nach Süßem nicht stillt, brauche ich hinterher noch Schokolade. Meist schaffe ich es, nach 50 g aufzuhören. Sag mal ehrlich: mein Geschmack ist doch total versaut. Warum sollte ich mich noch der Demütigung eines Assessments unterziehen?</span>
; Antwort der KI: <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Ganz ehrlich: Dein Geschmack ist nicht „versaut“, er ist einfach nur perfekt auf die industrielle Logik optimiert. Salami-Pizza, Coke Zero und Schokolade bedienen die drei mächtigsten Hebel unseres Gehirns: Fett, Salz und den Bliss-Point (Süße). Dass du nach 50 g Schokolade aufhören kannst, zeigt sogar eine ziemlich beeindruckende Selbstbeherrschung.</span>
: <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Warum also das Assessment?</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Vom Passagier zum Piloten: Momentan steuert die Lebensmittelindustrie deine Gelüste über Kontrollknöpfe, die wir alle haben. Das Assessment ist kein Verhör, sondern eine Inventur dieser Knöpfe, damit du sie bedienen kannst – mit echtem Essen, das die gleichen Glücksgefühle auslöst, aber ohne das „Nachher-Tief“.</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Präzision statt Verzicht: Wir suchen nicht nach dem Salatblatt, das dich unglücklich macht. Wir suchen nach der Kombination aus Umami, Crunch und Säure, die deine Pizza-Lust auf ein Level hebt, gegen das die Tiefkühlware wie Pappe schmeckt.</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Keine Demütigung, sondern Daten. Für mich als KI ist deine Vorliebe für Salami-Pizza eine wertvolle Information, die mir hilft, dein Geschmacksprofil genauer zu sehen: Salami und Käse liefern dir intensive Fermentationsaromen (Umami), die Pizza den Crunch, und die Schokolade den nötigen Dopamin-Abschluss. Dasselbe können wir aber auch mit anderen Mitteln erreichen, und sogar noch besser.</span>
: <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Das Assessment ist kein Urteil, sondern die Blaupause, um dein „größtes Glück“ zu dekodieren. Statt Industrieware schlage ich dir Upgrades vor: Sauerteig-Fladenbrot, Finocchiona und Pecorino triggern dieselben Belohnungszentren wie Salami-Pizza, nur mit weitaus höherer Reizintensität. Was ich dir vorzuschlagen habe, ist nicht etwa fade Gesundheitsrohkost, sondern die ultimative, handwerkliche Version von dem, was dir tatsächlich am besten schmeckt.</span>
== 4. Ablauf der Koch-Sitzung ==
Der Rezept-Workflow ist die eigentliche Interaktion — der Moment, in dem aus Profil und Sitzungsparametern ein konkretes Gericht wird. Er folgt einer klaren Abfolge von Schritten, die sich nach wenigen Sitzungen als Routine einspielt:
{| class="wikitable"
! Benutzer-Input oder -Aktion !! KI-Output
|-
| Optional: Übergabe des Küchenprofils || Empfangsbestätigung
|-
| Konkreter Arbeitsauftrag, mit Sitzungsparametern<br/>z.B. <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Schlag mir 3 Rezepte für Spaghetti mit Tomatensauce vor, für 3 Personen. Ich habe noch frisches Basilikum im Kühlschrank.</span> || Ausgabe von Rezeptvorschlägen
|-
| Auswahl eines der Vorschläge<br/><span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Gib mir das Rezept für Nr. 1, die „mediterrane Umami-Bombe (Puttanesca-Stil)“. Können wir die Sardellen weglassen?</span> || Ausgabe des Rezepts
|-
| Rezept vor dem Kochen einmal kritisch lesen<br/>Gegebenenfalls Anforderung von Änderungen oder Korrekturen<br/><span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Was für Öl? Und kann es sein, dass du die Gewürze vergessen hast?</span></span> || Gegebenenfalls: Ausgabe des revidierten Rezepts
|-
| Optional: Rückfrage ''während'' des Kochens<br/><span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe gerade festgestellt, dass mein Basilikum ziemlich welk ist; wie kann ich es ersetzen?</span> || Frage wird beantwortet.<br/><span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Wenn nur die Optik das Problem ist, koch es in der Sauce 5 Minuten lang mit und nimm es dann heraus.</span>
|-
| Optional: Post-cook-Review<br/><span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Der Geschmack war okay, aber mir hat das leuchtende Grün auf dem Teller gefehlt; die Extraktion ist eine gute Notlösung, ersetzt für mich aber nicht das visuelle Erlebnis von frischem Basilikum.</span>||
|}
=== Erster Schritt: Übergabe des Küchenprofils ===
Es ist möglich, ohne Übergabe eines [[#Das Küchenprofil|Küchenprotokolls]] zu arbeiten. Die KI verhält sich dann aber tendenziell wie ein gewöhnliches Kochbuch und mutet dem Benutzer zum Beispiel zu, dass er Zutaten erst noch kaufen muss.
=== Zweiter Schritt: Arbeitsauftrag ===
[[File:Dish based on an AI-generated cooking recipe 05.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Mediterranean Chicken & Sweet Potato Roast, mit zart-krossem Pistazien-Duqqa und einer Joghurt-Sauce]]
Der Arbeitsauftrag ist der erste Input für die KI, ohne den überhaupt nichts geht. Hier einige Beispiele:
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Habe frischen schwarzen Kabeljau. 4 Portionen, einer meiner Gäste isst nur ganz Klassisches. Einkauf in einem sehr gut sortierten großen Supermarkt ist eingeplant. Mittlere Komplexität. 4 Vorschläge.</span>
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">3 Vorschläge für ein mediterranes 3-Gänge-Menü. Habe frische Langusten vom Markt. Zubereitung darf technisch anspruchsvoll sein und beliebig viel Zeit beanspruchen. Reste willkommen, wenn sinnvoll verwertbar. Zielzeit: 20:00 Uhr.</span>
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">4 Vorschläge für 6 Personen (100 %). Muss einfach zuzubereiten sein und darf maximal 40 Minuten dauern. Vor andere Zutaten verbrauchen: 1 kg Kartoffeln, außerdem 8 Eier, die unbedingt heute weg sollen. Gezieltes Meal-prep für morgen. Kein Einkauf möglich.</span>
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich brauche 2 Vorschläge für ein indisches Abendessen für 3 Personen (Portionsgröße 120 %). Ankerzutat: Panir-Käse. Komplexität: Mittel. Zielzeit: 19:15 Uhr. Zeig mir etwas, das ich noch nicht kenne. Bitte genaue Timings für alle Schritte.</span>
: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Gib mir ein komplettes Rezept. Cuisine: Südostasiatisch. Ich habe eine rote Paprika und 100 ml Kokosmilch, beides muss weg. Einkaufen im Discounter möglich, darf aber höchstens 15 Euro kosten. Keine Reste erwünscht. Überrasch mich mit einer Technik, die ich noch nicht kenne. Fast hätte ich es vergessen: meine Frau kommt heute erst spät von der Arbeit, wir essen getrennt; schlag mir etwas vor, das sie gut aufwärmen kann.</span>
{{Anker|Sitzungsparameter}}Außer der Bezeichnung des gewünschten Gerichts können im Arbeitsauftrag auch '''Parameter''' übergeben werden, z.B. die Zahl der gewünschten Portionen. Parameter, die praktisch unveränderlich sind (weil z.B. in einem Zwei-Personen-Haushalt fast immer zwei Portionen gebraucht werden), kann man – statt sie im Arbeitsauftrag jedesmal neu anzugeben – ins Küchenprofil schreiben, und erwähnt sie im Arbeitsauftrag nur dann, wenn der Wert einmal abweicht (z.B. die Zahl der Portionen, wenn Gäste kommen). Hier eine Übersicht über naheliegene und mögliche Sitzungsparameter:
[[File:Dish based on an AI-generated cooking recipe 07.jpg|thumb|Nach einem Chatbot-Rezept gekocht: „Slow-Roasted“ Pork & Kimchi-Stew (Jjigae-Style), mit Schweinehack, Kimchi, Süßkartoffel, Bok Choy, Würzbasis: weißes Miso und Gochujang; dazu brauner Basmati]]
; Zahl der Vorschläge: Die KI ist in der Lage, auf den Arbeitsauftrag direkt mit einem detaillierten Rezeptvorschlag zu antworten. Aus verschiedenen Gründen ist es jedoch zweckmäßiger, erst eine Anzahl von Vorschlägen abzurufen. In der Praxis bewährt haben sich '''drei oder vier Vorschläge''' (weniger erlauben nicht wirklich eine Wahl; mehr verleitet dazu, keinen zu wählen — ein aus der Entscheidungsforschung bekanntes Phänomen, das als ''Paradox der Wahl'' bezeichnet wird). Falls keiner von diesen gefallen sollte, lässt man einfach 3 oder 4 weitere ausgeben.
; Temporäres Vorratsupdate: Was ist heute vorhanden, das nicht zum Dauerbestand gehört? Frisches Gemüse, Obst, Kräuter aus dem Garten, ein Stück Fisch vom Markt, eine saisonale Spezialität — alles, was nur zeitweise verfügbar ist und in den Rezeptvorschlägen berücksichtigt werden soll.
; Use-first-Queue: Welche Zutaten müssen heute oder in den nächsten ein bis zwei Tagen verbraucht werden?
; Ankerzutaten: Welche Zutaten sollen auf jeden Fall im Rezept vorkommen — nicht weil sie dringend verbraucht werden müssen, sondern weil der Benutzer gezielt etwas damit kochen möchte? Das kann eine Zutat sein, die interessant aussah und spontan gekauft wurde oder auf die der Benutzer heute einfach Lust hat.
; Personenzahl und Portionsgröße: Für wie viele Personen wird gekocht, und in welcher Portionsgröße? Wer häufig mit der KI kocht, wird bald herausfinden, ob die Portionen z.B. 70 oder 90 oder 100 oder 120 % der standardmäßigen Portionsgröße betragen sollen.
; Novitäts-Präferenz: Sind Kreativität und Überraschungen erwünscht, oder soll die KI lieber etwas Vertrautes vorschlagen?
; Komplexitätslevel: Soll das Gericht einfach zuzubereiten sein oder darf es technisch anspruchsvoll sein?
; Zeitaufwand: Wie viel Zeit ist heute für die Essenszubereitung maximal verfügbar?
; Zielzeit der Mahlzeit: Wenn die Mahlzeit zu einem bestimmten Zeitpunkt auf den Tisch kommen soll, ist die KI in der Lage, für jeden Zubereitungsschritt die optimale Startzeit zu berechnen und als Zeitstempel ins Rezept aufzunehmen.
; Einkaufsbereitschaft: Soll die KI ausschließlich mit dem arbeiten, was vorhanden ist, oder ist der Benutzer bereit, noch Zutaten einzukaufen? Wo kann er einkaufen? Und was darf es kosten?
; Reste-Toleranz: Reste können sowohl vom zubereiteten Gericht als auch von Zutaten anfallen. Sind sie zu vermeiden oder erwünscht? Soll die KI, falls Reste erwünscht sind, Vorschläge machen, was damit anzufangen ist? Falls geplant ist, Reste schonend aufzubewahren oder einzufrieren: soll die KI Anleitung geben, wie dies am besten gemacht wird?
Wenn Sitzungsparameter für einen Benutzer praktisch immer dieselben sind (z.B. Personenzahl und Portionsgröße, Zielzeit der Mahlzeit), kann man sie als Grundeinstellungen ins Küchenprofil aufnehmen, und erwähnt sie im Arbeitsauftrag nur dann, wenn sie von der Grundeinstellung abweichen sollten.
=== Dritter Schritt: Vorschlagsrunde und Rezeptauswahl ===
; Benutzerinput: <div style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Mach mir drei Vorschläge für Spaghetti-Gerichte, die ich in Deutschland im Restaurant wahrscheinlich nie bekommen würde.</div>
; KI-Output:<div style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">1. Spaghetti con la Mollica (Kalabrien / Basilikata)</div>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Ein Paradebeispiel der Cucina Povera. Da Käse früher für viele zu teuer war, wurde altbackenes Brot als Geschmacks- und Texturgeber genutzt.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Das Besondere: Die Basis ist eine Emulsion aus hochwertigem Olivenöl, Anchovies, Knoblauch und Peperoncino. Das entscheidende Element ist die Mollica – in Öl goldbraun und knusprig ausgebackene Brotbrösel, die erst ganz am Ende über die Pasta gegeben werden.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Profil: Starkes Umami durch die Sardellen, komplexer texturaler Kontrast zwischen weicher Pasta und krossem Brot.</span>
----
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">2. Spaghetti al Nero di Seppia (Sizilien / Venedig)</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Dieses Gericht nutzt die Tinte des Tintenfisches nicht nur als Farbstoff, sondern als primäres Gewürz.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Das Besondere: Die Sauce wird aus frischem Tintenfisch, Weißwein, Knoblauch und der tiefschwarzen Tinte hergestellt. Entgegen der Erwartung schmeckt die Tinte nicht "fischig", sondern hat ein tiefes, erdiges und leicht metallisches Aroma.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Profil: Tiefes, dunkles Umami mit einer seidigen Textur und einer visuell radikalen Ästhetik.</span>
----
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">3. Spaghetti Cacio e Pepe (Lazio / Rom)</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Obwohl es simpel klingt (Käse und Pfeffer), ist es in seiner römischen Urform eine technische Herausforderung, die keinen Fehler verzeiht.</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Das Besondere: Es wird ausschließlich Pecorino Romano und frisch gerösteter, grob gemörserter schwarzer Pfeffer verwendet. Die Kunst besteht darin, durch die exakte Temperatur des Pastawassers eine Emulsion zu schaffen, bevor der Käse klumpt oder Fäden zieht.</span>
:* <span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Profil: Starke Schärfe durch die ätherischen Öle des gerösteten Pfeffers, kombiniert mit der salzigen Dominanz des Schafskäses.</span>
Falls keiner der Vorschläge überzeugt, geht es in eine nächste Runde. Der Benutzer kann dabei kommentierend oder steuernd eingreifen. Beispiel:
:<span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Nr. 3 klingt gut, aber ich trau mir das mit der Emulsion nicht ganz zu. Und eigentlich hätte ich heute auch lieber etwas mit Tomaten. Gib mir noch drei.</span>
=== Vierter Schritt: Empfang das vollständigen Rezepts ===
Wenn der Benutzer seine Entscheidung gefällt und der KI mitgeteilt hat…
:<span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">„Spaghetti mit Tomaten-Konfitüre & geräuchertem Chili“ klingt spannend. Gib mir das Rezept, mit allen Zusatzinformationen, die ich in meinem Küchenprofil festgelegt habe. Außerdem brauche Zeitstempel. Zielzeit fürs Servieren ist 19 Uhr.</span>
…gibt diese das komplette Rezept aus. Beispiel:
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">'''Spaghetti mit Tomaten-Konfitüre & geräuchertem Chili'''</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Für 3 Personen | 100 % Portionsgröße | Zielzeit: 19:00 Uhr</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Dieses Gericht funktioniert für dich deshalb, weil es deine Vorliebe für extreme Umami-Konzentration und deutliche Säurespitzen aufgreift, während die cremige Burrata die für dich obligatorische feuchte Komponente liefert und einen spannungsreichen texturalen Kontrast zur dichten, würzigen Konfitüre bildet.</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Die Zutaten</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Basis: 750 g hochwertige Dosentomaten (San Marzano), 3 EL Tomatenmark.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Würze: 2 getrocknete Chipotle-Chilis (oder 1 EL Chipotle in Adobo), 3 Knoblauchzehen, Meersalz, 1 EL Zucker.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Pasta: 375 g Vollkorn-Spaghetti (z. B. Kamut oder Farro).</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Finish: 2 Kugeln Burrata (Kuhmilch), frisches Basilikum, 3 EL hochwertiges Olivenöl.</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Der Zeitplan</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">16:50 Uhr: Vorbereitung. Knoblauch fein hacken, Chipotles mörsern.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">17:00 Uhr: Start Konfitüre. Tomaten, Tomatenmark, Knoblauch, Chili und Süße in einem weiten Topf bei kleiner Hitze ansetzen.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">18:40 Uhr: Pastawasser aufsetzen (stark gesalzen). Konfitüre final abschmecken (Säure/Salz-Balance).</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">18:48 Uhr: Spaghetti ins Wasser geben (Garzeit ca. 10–12 Min. für Vollkorn, Packungsanleitung beachten).</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">18:57 Uhr: Pasta direkt aus dem Wasser in den Topf mit der Konfitüre heben. Ein Schluck Pastawasser dazu, kräftig durchschwenken, bis jede Nudel glänzt.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">19:00 Uhr: Anrichten. Burrata erst auf dem Teller mittig aufreißen und über die heiße Pasta geben. 2/3 Kugel pro Portion ist genug. Mit Olivenöl und Basilikum abschließen.</span>
:<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Toppings & Pairing</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Toppings: Für den texturalen Kontrast (Crunch) empfehlen sich geröstete Pinienkerne oder knusprig ausgebratene Bacon-Splitter.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Begleitsalat: Ein herber Arugula-Salat (Rucola) mit gehobeltem Fenchel. Das Dressing sollte eine starke Zitronennote haben, um die Schwere der Konfitüre zu brechen.</span>
:*<span style="color:MidnightBlue; font-family: 'Courier New', Courier, monospace;">Getränk: Ein kräftiger, leicht gekühlter Primitivo oder Negroamaro. Die Fruchtigkeit des Weins harmoniert mit der Tomatensüße, während die Tannine gegen die Schärfe bestehen. Alkoholfrei: Ein herbes Tonic Water mit Rosmarinzweig.</span>
Bevor der erste Handgriff getan wird, empfiehlt es sich dringend, '''das Rezept einmal vollständig zu lesen'''. Das dient zwei Zwecken: Erstens verschafft es einen Überblick über den Ablauf und verhindert, dass man mitten im Kochen überrascht wird — etwa von einer Ruhezeit, die das Rezept erfordert, oder von einem Schritt, der besondere Vorbereitung verlangt. Zweitens ist es der Moment, in dem mögliche Unstimmigkeiten auffallen: eine Zutat in der Liste, die in der Anleitung nicht mehr vorkommt, oder umgekehrt. Auf die Fallstricke des KI-generierten Rezepts geht Kapitel 7 ausführlicher ein.
=== Fünfter Schritt: Kochen — mit offenem Chatfenster ===
Das Chatfenster bleibt während des Kochens geöffnet. Dies ist einer der stillen, aber entscheidenden Vorteile der Methode gegenüber jedem Kochbuch und jeder Rezeptplattform: Die KI antwortet, wenn man sie mitten im Kochprozess fragt. Typische Situationen, in denen das unmittelbar nützlich ist:
*Eine Zutat fehlt doch: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe keinen Tahini — womit kann ich ihn ersetzen, und ändert das etwas an den Mengenverhältnissen?</span> Die KI nennt einen oder mehrere Ersätze und passt die Angaben entsprechend an.
*Eine Angabe ist unklar: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Was genau meinst du mit ‚auf mittlerer Hitze reduzieren' — soll die Sauce wirklich 20 Minuten köcheln oder reichen 10?</span> Die KI präzisiert und gibt wenn nötig visuelle oder sensorische Erkennungsmerkmale an — wie die Sauce aussehen, riechen oder sich verhalten soll, wenn der Schritt abgeschlossen ist.
*Ein Schritt erscheint verdächtig: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Das Rezept sagt, das Hähnchenfilet ist nach 12 Minuten gar — das kommt mir zu kurz vor für die Größe, die ich hier habe.</span> Die KI erklärt ihre Annahme, korrigiert sie falls nötig und gibt eine angepasste Empfehlung. Dieser Typ von Echtzeit-Rückfrage ist zugleich die wichtigste Prophylaxe gegen Kalibrationsfehler, die Kapitel 7 als häufigste Fehlerklasse benennt.
*Eine spontane Ergänzung bietet sich an: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe gerade noch frischen Estragon entdeckt — passt der zu diesem Gericht, und wenn ja, wann und wie gebe ich ihn dazu?</span> Die KI bewertet die Idee und integriert sie in den laufenden Kochprozess.
Das Chatfenster offen zu halten bedeutet nicht, dass man es ständig konsultieren muss — in der großen Mehrheit der Sitzungen verläuft das Kochen ohne Rückfragen. Aber die Möglichkeit, jederzeit nachzufragen, verändert die Grundhaltung beim Kochen: Man folgt dem Rezept nicht mehr blind, sondern im Dialog.
=== Sechster Schritt: Der Post-cook-Review ===
Nach dem Essen lohnt sich eine kurze Rückmeldung an die KI — ein bis zwei Sätze, nicht mehr. Was war gut? Was hätte besser sein können? Welche Zutat oder Technik war eine Entdeckung, welche eine Enttäuschung? Diese Rückmeldung ist der wichtigste Einzelbeitrag zum Aufbau des Geschmacksprofils. Eine KI, die nach zwanzig Sitzungen mit Post-cook-Reviews arbeitet, kennt die Präferenzen des Benutzers präziser als die meisten Menschen, die regelmäßig gemeinsam mit ihm essen.
Der Review muss nicht formal sein. Ein beiläufiger Kommentar — <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">die Sauce war zu dünn, aber die Kombination Zimt und Lamm war eine Offenbarung, die mache ich wieder</span> — ist vollständig ausreichend und außerordentlich informationsreich.
== 5. Spezielle Modi des KI-gestützten Kochens ==
[[File:Dish based on an AI-generated cooking recipe 03.jpg|thumb|Nach einem Chatbot-Rezept gekocht: Tahini-Lemon-Bowl, mit gebackenen Kichererbsen und in Pfeilwurz paniertem, gebratenem Feta]]
=== Variationsmodus: Altbekanntes einmal ganz anders zubereiten ===
Der Variationsmodus dient dazu, bestehende Rezepte – egal ob aus dem Internet, einem Kochbuch oder aus der Familientradition – mithilfe der KI an neue Rahmenbedingungen anzupassen. Anstatt das Rad neu zu erfinden, nutzt die KI das Original als strukturelle Vorlage und modifiziert Zutaten, Techniken oder Nährwerte, um das Gericht für spezifische Gäste, knappe Zeitbudgets oder persönliche Gesundheitsziele zu optimieren, ohne den Kern des Rezepts zu verlieren.
Beispiele (das Originalrezept wird der KI hier jeweils als separate Datei übergeben):
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Optimiere dieses klassische französische Schmorgericht für mein persönliches Profil: Erhöhe die Säure, verstärke die Kräuternote und sorge für mehr Crunch.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wandle dieses Gulasch-Rezept in eine vegetarische Version um, die die tiefe Umami-Struktur und die fleischähnliche Textur beibehält.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Passe dieses Rezept für meinen Gast an, der eine schwere Nussallergie hat und keinen Knoblauch verträgt, ohne dass das Gericht flach schmeckt.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe nur 20 Minuten Zeit; wandle dieses 2-Stunden-Rezept in eine Express-Variante um, die geschmacklich so nah wie möglich am Original bleibt.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Gestalte dieses Rezept „kindersicher“: Entferne den Alkohol, mildere die Schärfe und verstecke das Gemüse so, dass die Textur homogen bleibt. Es soll dabei aber auch für Erwachsene attraktiv bleiben.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Mache aus diesem einfachen Alltagsgericht eine luxuriöse Festtagsversion unter Verwendung von Premium-Zutaten und einer anspruchsvolleren Anrichteweise.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Übersetze dieses Pfannengericht für die Zubereitung im Backofen (Convection Roast), da ich heute für zehn Personen gleichzeitig kochen muss.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Dekonstruiere dieses klassische Gericht in eine moderne Fingerfood-Variante, die man ohne Besteck auf einer Party essen kann.</span>
=== Optimierungsmodus: Reste und Convenience veredeln ===
[[File:Dish based on an AI-generated cooking recipe 06.jpg|thumb|Gestrecktes und optimiertes fleischlastiges chinesisches Restaurantessen: ergänzt wurden u.a. schwarzer Reis, ein TK-Gemüsemix und Römersalat (Flüssigkeiten: Liquid Amino, Noilly Prat; Reisessig)]]
Nicht jedes Essen beginnt mit frischen Rohzutaten; oft ist die Aufgabe in der Küche die Rettung von Resten, die Aufwertung von Fertiggerichten oder das „Strecken“ einer zu kleinen Portion Take-out. Die KI fungiert hier als kulinarischer Problemlöser, der bestehende Geschmacksprofile erkennt und durch gezielte Ergänzungen in neue, vollwertige Mahlzeiten verwandelt.
Besonders beim Aufwärmen oder bei Tiefkühlkost leidet oft die Konsistenz. Die KI kann hier helfen, durch komplementäre Techniken – wie das Hinzufügen von frischen Texturen oder das nachträgliche Herbeiführen von Röstnoten – die typischen Schwächen von aufgewärmtem Essen (Matschigkeit, Eindimensionalität) gezielt auszugleichen.
Prompts für das kulinarische Upcycling:
* Portionserweiterung & Textur-Rettung: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe hier eine halbe Portion übrig gebliebenes Thai-Curry mit Gemüse, das durch das Aufwärmen leider sehr weich und matschig geworden ist. Schlage mir vor, mit welchen trockenen Basiszutaten (z. B. Getreide oder Hülsenfrüchte) ich die Menge verdoppeln kann und wie ich durch ein schnelles Topping aus gerösteten Komponenten wieder massiven Crunch und Frische in das Gericht bringe.</span>
* Convenience-Tuning: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Als Basis für ein schnelles Essen möchte ich eine Dose klassische Linsensuppe verwenden. Schlage mir drei gezielte Eingriffe vor, um das Aroma Richtung Levantine zu verschieben, und nenne mir eine Technik, wie ich die weichgekochte Textur der Dosenlinsen durch eine knusprige Einlage oder ein kontrastierendes Finishing (z. B. in Butter gebratene Croutons mit spezifischen Gewürzen) kompensieren kann.</span>
* Resteverwertung mit Profil-Check: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Vom Vortag ist eine Portion gebratener Reis übrig geblieben. Das Gericht ist mir zu trocken und geschmacklich etwas flach. Erstelle eine Anleitung, wie ich daraus ein 'Moist-Dish' mache, indem du eine passende, schnell zubereitete Sauce hinzufügst, und gib mir eine Empfehlung für eine saure oder bittere Komponente, die das schwere Umami aufbricht.</span>
=== Kochen im Team ===
Beim Team-Kochen fungiert die KI als virtueller Küchenchef und Koordinator. Sie verteilt Aufgaben basierend auf den individuellen Fähigkeiten der Teammitglieder, berücksichtigt die Ergonomie des verfügbaren Raums und synchronisiert die Arbeitsabläufe durch präzise Zeitstempel. Ob als digitaler Aushang für alle oder als personalisierter Instruktions-Feed auf dem eigenen Smartphone – die KI sorgt dafür, dass aus dem potenziellen Chaos einer Gruppensitzung ein harmonischer, paralleler Workflow wird.
Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir wollen ein Rinderfilet Wellington mit einer komplexen Rotwein-Reduktion kochen. Wir sind zu viert: Zwei von uns sind sehr erfahren, zwei sind Anfänger. Verteile die Aufgaben so, dass die Profis das Fleisch parieren und die Sauce montieren, während die Anfänger die Duxelles vorbereiten und den Teig verzieren.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Plane die Zubereitung von selbstgemachten Teigtaschen (Gyoza) für drei Personen. Da unsere Küche sehr schmal ist, teile die Arbeit auf: Eine Person bereitet die Füllung am Esstisch vor, eine rollt den Teig aus und nur die dritte Person steht am Herd, um die Taschen portionsweise zu braten.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir bereiten selbstgemachte Pizza zu, inklusive Teig und Sauce. Wir sind zwei Erwachsene und zwei Kinder (6 und 9 Jahre). Gib den Kindern spezifische Aufgaben wie das Zerzupfen des Mozzarellas und das kreative Belegen, während die Erwachsenen den heißen Ofen und das Schneiden übernehmen.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir kochen ein klassisches Risotto mit geschmortem Saisongemüse. Eine Person im Team ist älter und möchte im Sitzen mithelfen. Weise ihr Aufgaben wie das Schälen des Gemüses und das Zupfen der Kräuter zu, während die anderen den Rührvorgang am Herd übernehmen.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir bereiten ein Drei-Gänge-Menü (Jakobsmuscheln, Lammrücken, Schokosoufflé) vor. Erstelle für uns drei einen synchronisierten Zeitplan mit Zeitstempeln, damit die Vorspeise um 19:30 Uhr und der Hauptgang um 20:15 Uhr serviert werden kann. Wer muss wann was vorbereiten?</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir kochen authentisches thailändisches Green Curry. Erstelle drei separate Instruktionslisten, die wir uns auf die Handys schicken können: Posten A ist für die Currypaste und das Aroma zuständig, Posten B für das Schneiden von Fleisch und Gemüse, Posten C für den Reis und das finale Abschmecken.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir kochen indisches Butter Chicken mit Naan-Brot. Verteile die Aufgaben auf drei Personen, aber baue für jeden von uns feste 5-Minuten-Slots für den Zwischenabwasch und das Aufräumen ein, damit nach dem Essen die Küche bereits fast sauber ist.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wir planen ein herbstliches Buffet mit 5 verschiedenen Mezze. Weise uns vier klare Rollen zu (z. B. Chef de Cuisine, Saucier, Gardemanger, Patissier) und ordne die entsprechenden Rezepte und Teilschritte diesen Rollen zu, damit jeder die volle Verantwortung für seinen Bereich trägt.</span>
=== Strategisches Verbundkochen ===
Beim intelligenten Planen für mehrere Tage agiert die KI als persönlicher Logistikchef. Sie erstellt nicht nur einen strukturierten Einkaufszettel für alle geplanten Mahlzeiten, sondern taktet die Rezepte auch nach der Haltbarkeit der Zutaten: Empfindlicher Fisch oder frischer Spinat landen am Montag auf dem Teller, während robustes Wurzelgemüse oder vakuumierte Vorräte für den Freitag reserviert werden.
Dabei lassen sich zwei Ansätze unterscheiden:
==== Klassisches Batch-Cooking (Die Vorrats-Session) ====
In einer einzigen, konzentrierten Kochsession werden mehrere Mahlzeiten komplett oder in großen Komponenten vorgekocht. Dies ist ideal für Menschen mit wenig Zeit unter der Woche.
Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Plane eine zweistündige Session am Sonntag für 5 Büro-Lunches, die ich in der Mikrowelle aufwärmen kann. Ich möchte zwei verschiedene Eintöpfe und eine Getreidebasis vorkochen.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich möchte am Sonntag eine riesige Menge meiner levantinischen Basissauce vorkochen. Erstelle mir drei Variationen, wie ich diese Basis von Montag bis Mittwoch mit minimalem Aufwand (unter 10 Min.) völlig unterschiedlich finalisieren kann.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Am Samstag kommen meine Eltern zu Besuch. Plane meine Mahlzeiten ab Dienstag so, dass ich durch tägliches ‚Beiläufig-Vorbereiten‘ am Samstag, wenn die Gäste da sind, fast keine aktive Arbeit mehr habe.</span>
==== Synchron-Planung (Der strategische Einkauf) ====
Hier wird an den jeweiligen Tagen frisch gekocht, aber die Planung und der Einkauf erfolgen synchron. Dieser Modus nutzt Synergien bei den Zutaten und spart Zeit durch einmaliges, gezieltes Besorgen aller Waren.
Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Plane für die nächsten 5 Tage. Ich möchte nur zweimal tierisches Protein verwenden (Dienstag und Freitag). Erstelle eine Einkaufsliste, die sicherstellt, dass die frischen vegetarischen Zutaten für die ersten drei Tage nicht welken.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Erstelle einen Plan für 4 Tage: Dienstag ist bei uns fix Pastatag für die Kinder, Mittwoch esse ich allein (etwas Anspruchsvolleres), und Donnerstag muss es blitzschnell gehen. Maximiere die Überschneidungen beim Gemüse für den Einkaufskorb.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich habe heute einen Großeinkauf gemacht, inklusive empfindlicher Beeren und Hackfleisch. Einzelheiten lege ich in separater Datei bei. Sortiere meine ebenfalls beiliegenden Rezeptwünsche für die Woche so, dass die verderblichsten Sachen zuerst verbraucht werden, ohne dass der Speiseplan eintönig wirkt.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Ich kaufe einen großen Kopf Rotkohl und einen Sack Kartoffeln. Plane drei Gerichte über die Woche verteilt, die diese beiden Hauptzutaten nutzen, aber jedes Mal eine völlig andere Länderküche repräsentieren.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">In meinem Garten ist gerade der Mangold reif. Plane für die nächsten 3 Tage Rezepte, die jeweils eine große Portion Mangold verarbeiten, aber achte darauf, dass ich nur einmal für die ergänzenden Zutaten einkaufen gehen muss.</span>
=== Auf Bestellung erfunden ===
[[File:AI Designed Customized Cookies.jpg|thumb|Personalisierte Chocolate Chip Cookies. Der Benutzer wünschte sich trockene und sehr feste, krümelarme, mit grobem Salz bestreute Kekse mit minimierten einfachen Kohlenhydraten, seinem persönlichen Geschmacksprofil entsprechend. Die KI schlug u.a. Verwendung von Mandelmehl, Roggenvollkornmehl, Eiklar und Sucralose sowie zweifaches Backen vor. Die genannten Zutaten sind etwas, das dieser Benutzer tatsächlich ständig vorrätig hält.]]
Manchmal reicht Personalisierung im üblichen Sinne nicht aus. Das Benutzerprofil ist bekannt, das Geschmacksprofil ist geschärft — und trotzdem gibt es Situationen, in denen der Benutzer etwas braucht, das so spezifisch ist, dass kein Kochbuch und keine Rezeptplattform der Welt es liefern kann. Genau hier liegt eine der stillen Stärken der Methode: Die KI erfindet auf Anfrage Originalrezepte, die auf eine einzige Person und eine einzige Situation zugeschnitten sind. Ein paar Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Rezept für warmes High-Protein-Lunch im Büro, nur mit Wasserkocher und Thermoskanne gegart. Kein Tütensuppen-Niveau.</span>
''
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Brauche ein vollwertiges, klecker- und krümelfreies Gericht, das man beim Computerspiel blind mit einer Hand essen kann. Andere Hand fixiert.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Snack gesucht. Maximaler akustischer Crunch beim Kauen, aber minimal Kalorien. Fokus auf extremen oralen Widerstand.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Nahrhafter Frühstücksriegel, der beim Auspacken und Kauen absolut lautlos ist. Pendler-Modus, will die Mitreisenden nicht verärgern.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Hilfe, meine Kekse verschwinden immer in unbefugten Mündern! Denk dir ein Kleingebäck aus, das nur mein persönliches Profil perfekt trifft, aber für alle meine Mitbewohner geschmacklich abstoßend ist.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Einzelportion „Wellington“-Style für den Toaster-Ofen. Fertig in 15 Min, keine Restmengen bei Spezialzutaten.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Herzhaftes Hauptgericht mit kryogenen Zutaten zur Senkung der Körpertemperatur. Kein Salat, keine kalte Suppe.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Erfinde eine Zubereitungsart, die Gemüse in eine papierartige oder knusprige Form bringt. Keine matschigen Texturen erlaubt.</span>
'''Aber aufgepasst''': Die Gefahr des Scheiterns steigt hier, da die KI oft in technologische Grenzbereiche spekuliert. Anspruchsvolle Techniken wie die molekulare Sphärisierung oder das präzise Temperieren von Schokolade erfordern nicht nur spezialisiertes Equipment, sondern auch jahrelange Übung in der Feinmotorik. Wenn die KI komplexe Emulsionen oder chemisch sensible Texturkontraste vorschlägt, überschätzt der Laie leicht seine Fähigkeiten. Solche Verfahren verzeihen keine Abweichung bei Temperatur oder pH-Wert – handwerkliche Meisterschaft lässt sich nicht durch einen Prompt ersetzen.
=== Explorationsmodus ===
Im Explorationsmodus bittet der Benutzer die KI, auf Basis des bisherigen Geschmacksprofils aktiv neue Empfehlungen auszusprechen. Statt auf konkrete Zutaten oder Hunger zu reagieren, nutzt die KI das gespeicherte Wissen über Vorlieben und Abneigungen als Koordinatensystem, um gezielt Vorschläge in das noch unbekannte kulinarische Terrain zu machen – ähnlich einem personalisierten Algorithmus für Musik, nur für die Küche. Beispiele:
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Welche Zutat, die ich noch nie verwendet habe, passt perfekt zu meiner Vorliebe für Umami und Texturkontraste?</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Nenne mir eine regionale Küche, die ich bisher ignoriert habe, die aber genau mein Säure-Schärfe-Empfinden trifft.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Schlage mir drei Gewürze vor, die mein aktuelles Repertoire sinnvoll ergänzen, ohne redundant zu sein.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Entwirf ein Rezept, das eine Zutat verwendet, die ich normalerweise ablehne, aber so zubereitet ist, dass sie mein Profil anspricht.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Welches Getränk-Pairing (alkoholisch oder alkoholfrei) würde meine liebsten Abendessen ideal ergänzen?</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Welches Getreide oder Pseudogetreide fehlt mir noch für eine abwechslungsreiche Textur in meinen Bowls?</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Empfiehl mir ein spezielles Küchenwerkzeug, das Techniken ermöglicht, die mein Profil radikal erweitern würden.</span>
* <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Welche Konservierungsmethode (Einlegen, Trocknen etc.) passt am besten zu den Aromen, die ich das ganze Jahr über essen möchte?</span>
=== Bildungsmodus: Den eigenen Gaumen verstehen ===
Nach einer längeren Phase der Zusammenarbeit ist die KI in der Lage, nicht mehr nur Rezepte zu liefern, sondern ein konsistentes kulinarisches Profil für den Benutzer zu entwerfen. Dabei entstehen oft wiederkehrende Muster in der Auswahl von Gewürzen, Säureträgern oder Techniken, die tief in der Aromenlehre verwurzelt sind, vom Benutzer aber oft nur unbewusst als „stimmig“ wahrgenommen werden.
Im Bildungsmodus nutzt man die KI als Mentorin, um die theoretische Architektur hinter den eigenen Vorlieben zu entschlüsseln. Indem man die KI zwingt, ihre Entscheidungen zu begründen, wandelt sich das Kochen von einer bloßen Ausführung von Schritten zu einer bewussten Schulung des eigenen Geschmacks- und Technikverständnisses.
Beispielexplorationen für den Bildungsmodus:
* Musteranalyse der Zutaten: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">In den letzten Monaten hast du mir für fast alle Fleischgerichte eine Kombination aus Sternanis und Orangenschale vorgeschlagen. Erkläre mir die chemische und geschmackliche Logik hinter diesem Muster und warum das spezifisch zu meiner Vorliebe für dunkle, komplexe Saucen passt.</span>
* Technik-Check: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Du schlägst bei meinen Gemüsebeilagen oft das Rösten bei sehr hohen Temperaturen statt Dämpfen vor. Welche Rolle spielt dabei die Maillard-Reaktion für mein Profil und wie verändert das die Balance, wenn gleichzeitig eine säurebetonte Sauce im Spiel ist?</span>
* Die 'Warum'-Frage beim Abschmecken: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">In der heutigen Fisch-Sauce hast du Kapernwasser und kalte Butter kombiniert. Warum hast du dich für diese spezifische Säurequelle entschieden und nicht für den Zitronensaft, den ich sonst oft verwende? Was bewirkt dieser Unterschied im Mundgefühl?</span>
* Profil-Extraktion: <span style="color: #2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Analysiere die letzten zehn Rezepte, die wir gemeinsam gekocht haben. Welche drei kulinarischen Grundprinzipien ziehen sich wie ein roter Faden durch diese Gerichte und wie könnte ich diese Prinzipien anwenden, wenn ich einmal völlig ohne KI-Hilfe ein improvisiertes Essen zubereite?</span>
== 6. Welcher Chatbot eignet sich am besten? ==
[[Datei:Dish based on an AI-generated cooking recipe 01.jpg|thumb|Nach einem Chatbot-Rezept gekocht: „South-Asian Heat“ Sirloin, mit Steak, fein gewürfelten, gebackenen Kartoffeln, grünen Bohnen, Spinat und Kapernäpfeln; gewürzt u.a. mit Tamarindenpaste, Gochujang und Fischsauce]]
Die Wahl des Chatbots beeinflusst den Workflow maßgeblich, da die Modelle auf unterschiedliche Daten spezialisiert sind. Gemini z.B. wirkt oft wie ein Praktiker, der massiv mit Inhalten aus Kochforen trainiert wurde und bei Warenkunde sowie pragmatischer Küchenlogistik glänzt. „Intellektuellere“ Modelle wie Claude, deren Fokus eher auf wissenschaftlichen oder literarischen Texten liegt, erweisen sich in der direkten Küchenpraxis oft als weniger intuitiv.
Trotzdem sollte der Benutzer selbst experimentieren, um herauszufinden, welche KI-Mentalität sich am besten in den persönlichen Workflow einfügt. Ein direkter Vergleich desselben Auftrags in verschiedenen Systemen offenbart schnell, ob man eher die logische Schärfe eines Strategen oder die pragmatische Erfahrung eines virtuellen Kochbuchs benötigt – die Letztentscheidung bleibt eine Frage des individuellen Stils.
== 7. Grenzen und Fallstricke ==
KI-gestütztes Kochen ist keine Magie, sondern ein logistisches Werkzeug. '''Die Methode ersetzt keine Kochkompetenz, sondern setzt sie voraus''': Wer weiß, wie ein Gericht schmecken sollte, erkennt Fehler im Entwurf sofort.
Die KI hat keinen Geschmackssinn und keine Augen. Sie weiß nicht, wie reif die Tomate oder wie scharf das Messer ist. Auch in Fragen der Lebensmittelsicherheit (Garzeiten bei Geflügel, Kühlketten) ist gesunder Menschenverstand obligatorisch.
Ein gedrucktes Kochbuch hat dieselben Schwächen – es kennt weder den Herd des Benutzers noch seine Abneigungen. Der entscheidende Vorteil der KI ist ihre '''Interaktivität''': Sie ist korrigierbar und passt sich im Dialog an. Wer die KI als lernfähigen Assistenten begreift, statt ihr blind zu vertrauen, wird die erheblichen Vorteile der Methode schnell für sich nutzen.
=== Was die KI nicht weiß — aber erfahren kann ===
[[File:Chicken eggs 21.jpg|thumb|Welche Eiergröße ein Benutzer als Standard ansieht, kann die KI nur wissen, wenn er ein solches Ei auswiegt und ihr das Ergebnis mitteilt.]]
Manche Wissenslücken der KI sind nicht struktureller, sondern biographischer Natur: Sie kennt die spezifische Realität des Benutzers schlicht noch nicht. Das ist kein Systemfehler, sondern ein Startzustand — einer, der sich durch explizite Eingaben ins Küchenprofil oder durch iterative Kalibrierung im Laufe der Zusammenarbeit zunehmend schließt.
==== Zutatengewicht und -größe ====
Die KI rechnet mit Standardgrößen — ein „Ei" ist für sie ein Ei mittlerer Größe, eine „Zwiebel" eine mittelgroße Zwiebel, eine „Kartoffel" eine von etwa 150 g. Was „mittlere Größe" konkret bedeutet, variiert jedoch je nach Land und Einkaufsquelle erheblich. Wer gewohnheitsmäßig große Eier kauft, kleine Schalotten verwendet oder besonders schwere Kartoffeln vorrätig hält, bekommt Rezepte, deren Mengenverhältnisse still vom Tatsächlichen abweichen. Besonders anfällig sind Zutaten, bei denen Größe und Gewicht stark variieren: Eier, Kartoffeln, Zwiebeln und Schalotten, Zucchini, Auberginen, Äpfel und Birnen, Hähnchenteile sowie Fischfilets. Die Lösung: diese Zutaten einmal wiegen und die Werte als Standardangaben ins Küchenprofil aufnehmen.
==== Kochkompetenz und Technik ====
[[File:Filleting bluefish.jpg|thumb|Das Filetieren von Fisch ist eine anspruchsvolle Technik, die nicht bei jedem Anfänger vorausgesetzt werden kann.]]
Die KI kann die tatsächliche Fingerfertigkeit des Benutzers nicht einschätzen — aber sie kann es lernen. Wer ihr nach einem misslungenen Versuch mitteilt, dass Emulsionen für ihn regelmäßig brechen oder dass panierter Feta in der Pfanne zerfällt, erhält künftig Vorschläge, die diese Grenzen respektieren oder gezielt Techniken empfehlen, die sie überwinden helfen. Schwierigkeitsgrade, die die KI zunächst nur abstrakt bewertet, werden durch solches Feedback konkret und personalisiert.
Alternativ kann der Benutzer die KI auch bitten, mit ihm ein Assessment durchzuführen, und dessen Ergebnis ins Küchenprofil aufnehmen.
==== Kalibration & Hardware ====
Auch das Verhalten eines konkreten Geräts lässt sich ins Profil einarbeiten: ob der Ofen oben stärker heizt, ob die angezeigten 180 °C tatsächlich erreicht werden, ob eine bestimmte Pfanne Hitze ungleichmäßig verteilt. Mit solchen Angaben werden Garzeiten und Temperaturempfehlungen der KI präziser.
=== Übergehorsame Befehlsanwendung ===
Die größte Stärke der KI – ihre Bereitschaft, jeden Befehl umzusetzen – ist gleichzeitig ihre größte Schwäche. Hier einige Beispiele:
==== Der Würzfehler: wenn Präzision zur Kumulation wird ====
Die KI führt Skalierungsanweisungen ohne kulinarisches Urteil aus. Wer „verdopple die Sauce" sagt, bekommt die doppelte Menge — auch wenn die Sauce extrem salzig, scharf oder fettig ist und die Balance des Gerichts dabei kippt. Dasselbe Muster zeigt sich bei der Kombination mehrerer intensiver Komponenten: Wenn der Benutzer gleichzeitig Gochujang, Chipotle und frische Chilischoten anfordert, setzt die KI alle drei um, ohne zu prüfen, ob das Ergebnis noch genießbar ist. Sie optimiert auf Befehlstreue, nicht auf Geschmack.
Die Lösung ist eine Würzdisziplin-Regel im Küchenprofil, die der KI eine konkrete Obergrenze setzt und sie zur aktiven Kumulations-Kontrolle verpflichtet. Beispiel: <span style="color:#2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Bei jedem Rezept darfst du den Salzgehalt — summiert über alle salzhaltigen Zutaten wie Sojasauce, Fischsauce, Miso, Kapern, Sardellen und Salz selbst — 1,5 g Natrium pro Portion nicht überschreiten. Wenn mehrere scharfe, salzige oder fettreiche Komponenten zusammenkommen, weise mich auf den kumulativen Effekt hin und schlage vor, welche Komponente reduziert oder weggelassen werden sollte. Skalierungsanfragen für einzelne Zutaten oder Saucen führe nicht mechanisch aus, sondern prüfe, ob die Balance des Gerichts dabei erhalten bleibt.</span>
==== Der Personalisierungsfehler: wenn das Profil zur Falle wird ====
[[File:Dioscorea polystachya (batatas).jpg|thumb|Nagaimo]]
Ein gut entwickeltes Geschmacksprofil birgt eine subtile Gefahr: Die KI kann so konsequent auf die bekannten Vorlieben des Benutzers optimieren, dass sie eine unbekannte Zutat ihrer kulinarischen Identität beraubt, bevor der Benutzer überhaupt die Chance hatte, sie kennenzulernen.
Ein Beispiel: Ein Benutzer kauft Nagaimo — eine japanische Bergkartoffel, die in der traditionellen Küche wegen ihrer ausgeprägten Schleimigkeit geschätzt wird, die beim Reiben eine fast klebrige, fließende Textur entwickelt. Diese Eigenschaft ist keine Schwäche, sondern das Wesen der Zutat: Sie gibt dem japanischen Gericht Tororo seinen charakteristischen, seidigen Schmelz, sie macht Okonomiyaki elastisch und luftig, sie bindet Teige auf eine Art, die kein anderes Bindemittel replizieren kann. Ein Geschmacksprofil, das Schleimigkeit als Abneigung verzeichnet und Krossheit bevorzugt, wird die KI wahrscheinlich dazu veranlassen, aus dem Nagaimo gebackene Fritten zu machen — was technisch durchführbar ist, aber die Zutat auf ein Ergebnis reduziert, das von gewöhnlichen Kartoffelfritten geschmacklich nicht zu unterscheiden ist. Der seltene Fund wird verschenkt.
Die Lösung ist eine Authentizitätsregel für den Erstkontakt, die man als explizite Anweisung ins Küchenprofil aufnehmen kann. Beispiel: <span style="color:#2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wenn wir eine Zutat zum ersten Mal verwenden — insbesondere etwas Ethnisches, Seltenes oder außerhalb des normalen Supermarktsortiments — darfst du mir nur Rezepte vorschlagen, die eine möglichst große Annäherung an traditionelle Zubereitungsweisen bilden. Du sollst dies auch dann tun, wenn das Ergebnis mit meinem Geschmacksprofil nicht oder nicht vollständig übereinstimmt. Wenn immer eine solche Abweichung besteht, sollst du mich aber ausdrücklich darauf hinweisen und genau beschreiben, welche Eigenschaften — z.B. Schleimigkeit, Bitterkeit, intensive Fermentationsaromen, ungewohnte Texturen — diese Zutat bei traditioneller Zubereitung mitbringt.
</span>
==== Der Ästhetikfehler: wenn die KI das Auge vergisst ====
Manche Zutaten sind mehr als ihre Aromen und Texturen — sie sind visuell. Ihr eigentliches Potenzial erschließt sich erst auf dem Teller, in einer bestimmten Schnittform oder durch ein bestimmtes Anrichten. Eine KI ohne Augen weiß zwar, was eine Zutat ist — aber nicht, wie sie aussieht, und damit auch nicht, warum eine bestimmte Zubereitungsweise sie zu etwas Besonderem macht.
Dieses Problem hat zwei Dimensionen. Die erste betrifft die Form: Lotuswurzel etwa entfaltet in Scheiben geschnitten eine fast ornamentale Wirkung — das netzartige Muster der Hohlkanäle macht jede Scheibe zu einem kleinen ästhetischen Ereignis auf dem Teller. Eine KI behandelt sie nach rein funktionalen Kriterien und schneidet sie in Stifte, weil Stifte bei Pfannengerichten eine bewährte Form sind. Kulinarisch nicht falsch — aber das Besondere der Zutat ist verschenkt. Die zweite Dimension betrifft die Farbe: Die KI kombiniert Zutaten nach Geschmack und Textur, ohne zu sehen, ob auf dem Teller drei verschiedene Brauntöne aufeinandertreffen oder ob ein einzelnes farbiges Element das ganze Gericht visuell rettet. Gerichte, die fantastisch schmecken, können optisch vollständig misslingen — und die KI bemerkt es nicht.
Das Problem ist strukturell: Was sie über das Aussehen einer Zutat weiß, ist sprachlich kodiertes Wissen — und das bleibt abstrakt, solange es nicht mit expliziter Anweisung in die Rezeptlogik eingespeist wird.
Die Lösung ist eine Visualisierungsregel im Küchenprofil. Beispiel: <span style="color:#2e2ed1; font-family: 'Comic Sans MS', 'Comic Sans', cursive;">Wenn eine Zutat eine charakteristische Schnittästhetik oder visuelle Eigenschaft besitzt — wie die Querschnittstruktur von Lotuswurzel, die Marmorierung von Fleisch oder die Lamellen von Pilzen — sollst du diese in der Zubereitung aktiv berücksichtigen. Darüber hinaus sollst du bei jedem Rezept die Farbkomposition des fertigen Tellers mitdenken: Droht Monochromie, weise mich darauf hin und schlage ein gezieltes Farbelement vor — eine frische Kräutergarnitur, eine kontrastierende Sauce, eine anders gefärbte Beilage. Falls du dir über die visuelle Qualität einer Zutat unsicher bist, frage nach.</span>
=== Weitere typische Fehler ===
; Garzeiten: Die KI geht von Durchschnittswerten aus (Standard-Ofen, 180g-Filet). Da sie die reale Küche des Benutzers nicht sieht, sind Garzeiten immer nur Richtwerte. Der Benutzer muss sich auf sein Handwerk verlassen: Bräunung und Textur müssen eigenständig geprüft werden.
; Abschmecken: Die KI kalkuliert Würzintensität theoretisch, schmeckt aber nicht ab. Da Naturprodukte wie Chilischoten in ihrer Schärfe stark schwanken und salzhaltige Zutaten sich kumulativ addieren, sind alle Mengenangaben Richtwerte. Das schrittweise Hinzufügen und finale Abschmecken bleibt eine exklusive menschliche Aufgabe.
; Diätische und kulinarische Regeln: Die KI neigt dazu, rezeptspezifische Wünsche als generelle Profileigenschaften zu verbuchen. Wer für ein einzelnes Gericht „ohne Salz" oder „ohne Fett" anfordert, riskiert, dass die KI diese Vorgabe auf alle folgenden Rezepte überträgt. Im Zweifel den Geltungsbereich explizit benennen: „nur für dieses Rezept".
; Kontext & Konsistenz: In langen Chats kann die KI Details „vergessen“ (Kontextverlust) oder die Zutatenliste widerspricht der Anleitung (Inkonsistenz). Solche logischen Brüche fallen bei der Durchsicht vor dem Kochen sofort auf. Ein kurzes Nachhaken korrigiert das Rezept meist unmittelbar.
== Siehe auch ==
* [[Kochbuch]]
* [[Grundlagen der Ernährung]]
[[Kategorie:Buch]]
skz08zfg111s8xbuhfnvua2jowz18yy