Programmiersprachen 1 – Zusammenfassung Nico S. Beck FH-Wedel 06.01.2001 === Das Prinzip der Datenverarbeitung: EVA (Eingabe – Verarbeitung – Ausgabe) === 1. Begrifferklärungen: Aktuelle Parameter Aktuelle Parameter versorgen die Schnittstellen von Prozeduren und Funktionen beim Aufruf mit Werten/Variablen. Anweisungsteil Hier stehen im Programm Folgen von Anweisungen. Array-Datentyp Arrays fassen eine feste Anzahl von Elementen eines anderen Datentyps zu einem neunen Datentypen zusammen. Die einzelnen Elemente können über Indizes angesprochen werden. Assemblersprachen Textuelle Bezeichnung für Maschinenbefehle (mnemotechnische Bezeichner ). Ein Assemblerbefehl entspricht einem Maschinenbefehl, muss aber übersetzt werden. Aufzählungstypen Benutzerdefinierter ordinaler Datentyp. Aufzählung aller Werte in der Typendeklaration, die eine Variable dieses Typs annehmen kann. Ausdruck Ein Ausdruck beschreibt, welche Operatoren auf welche Operanden angewendet werden soll. Sie werden durch Kombination von beliebig vielen Operatoren und Operanden gebildet. Jede (korrekte) Auswertung führt zu einem Ergebniswert. Bedingte Anweisung Bedingte Anweisungen setzten sich aus Anweisungsfolgen zusammen, von denen keine oder eine bestimmte ausgeführt wird. Die Auswahl der evtl. ausgeführten Anweisungsfolge wird durch Bedingungen gesteuert. (If und Case) Codierung Datenumwandlung von einer zur anderen Darstellungsform nach festen Vorschriften. Compiler Spezielles Programm zum übersetzten und ggf. prüfen des Quellprogramms. Compiler-Befehle Compiler-Befehle steuern die Arbeitsweise des Compilers. Compilieren Übersetzung eines Programms von einer höheren Programmiersprache in elementare Rechneranweisungen (Maschinensprache). Datentyp Datentypen machen Daten unterschiedlicher Art (Wertebereiche etc.) für Programme unterscheidbar. Deklarationsteil Hier werden im Programm Variablen, Konstanten etc. deklariert. Einfache Anweisung Kleinste, isoliert ausführbare Einheit eines Programms (Zuweisung, Prozeduranweisung, Goto-Anweisung). Formale Parameter Formale Parameter dienen als Schnittstelle von Prozeduren und Funktionen und werden in der Parameterliste der Prozeduren und Funktionen deklariert. Fundamentaler Datentyp ? Generischer Datentyp ? Iteration Wiederholung von Aktionen durch z. B. repeat-until-Schleifen. Kommentare Kommentare sind die interne Dokumentation eines Programms in natürlicher Sprache. Seite 1 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck FH-Wedel 06.01.2001 Konstanten Konstanten sind benannte Datenobjekte. Der Wert der Konstanten wird Übersetzungszeit der Programms ermittelt und festgelegt. Sie sind zur Laufzeit des Programms nicht veränderbar. Linken Verknüpfen eines übersetzten Programms mit zusätzlich notwendigen Programmbestandteilen. Maschinensprache Binär codierte Sprachelemente direkt durch den Prozessor ausführbar. Nichtterminalsymbol Syntaktische Einheit, die nicht direkt in den Zeichenfolgen einer Sprache auftreten dürfen und durch Regeln weiter abgeleitet werden müssen. Sie beschreiben größere Strukturen im syntaktischen Aufbau von Texten der Sprache. Objektprogramm Übersetztes, compiliertes Programm in maschinenausführbarer Form. Ordinale Datentypen Beschreiben eine geordnete, endliche Menge von Werten (Boolean, Integer, Char,...). Pragmatik Regeln zur praktischen Anwendung der Sprachkonstrukte. Programme Sinnvolle Folgen von Befehlen an die Hardware. Programmkopf Gibt dem Programm einen Namen. Prozeduranweisung Prozeduranweisungen führen zur Ausführung der Prozedur (Prozeduraufruf) Quellprogramm Für den Menschen lesbares Programm, das aus Befehlen einer (höheren) Programmiersprache besteht. Reelle Datentypen Keine Ordinaltypen, da die Begrenzung von Ganzzahltypen durch ein Gleitkomma aufgehoben wird (Single, Real, Extended...). Selektion Eine Auswahl an Aktionen. Semantik Semantik beschreibt die Bedeutung von (syntaktisch korrekten) Zeichenketten. Sie kann nur teilweise vom Compiler geprüft werden Sequenz Eine Folge von Aktionen. Signifikante Stellen Bei Gleitkommadatentypen wird nur die Anzahl an signifikanten Stellen als genaues Ergebnis gespeichert. Alle dahinter liegenden Stellen können Ungenauigkeiten beinhalten. Strukturierte Anweisung Strukturierte Anweisungen sind Verbund- und bedingte Anweisungen etc. Strukturierter Datentyp Dies sind unter anderem ein- und zweidimensionale Arrays oder Datensatztypen. Strukturierung Abgrenzung von Einheiten (Modularisierung) und Ordnung der Einheiten. Syntax Regeln zum korrekten Aufbau von Programmtexten. Teilbereichstypen Benutzerdefinierter ordinaler Datentyp, der die Einschränkung des Wertebereichs des ordinalen Basistyps durch Schranken in Form von Konstanten realisiert. Terminalsymbol Syntaktische Einheit, die direkt in den Zeichenfolgen einer Sprache auftreten dürfen und nicht mehr weiter durch Regeln abgeleitet werden müssen. Seite 2 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck FH-Wedel 06.01.2001 Typendeklaration Vereinbarung von neuen Bezeichnern für einen Datentypen. Nutzung um Bezeichner für neue benutzerdefinierte Datentypen zu vereinbaren oder (sehr selten) um sprechendere Namen für vordefinierte Datentypen zu vergeben. Es besteht die Möglichkeit zur exakten Anpassung der Wertebereiche von Variablen. Unit Units sind separate Quelltexteinheiten mit jeweils eigener Datei und können separat kompiliert werden. Uses-Klausel Gibt an, welche anderen Dateien (Units) Programmteile enthalten, die mitbenutzt werden sollen. Verbundanweisung Eine Verbundanweisung (zusammengesetzte Anweisung) fasst eine beliebige Anzahl von Anweisungen zusammen (Begin ... End). Sie gilt Syntaktisch als eine Anweisung. 2. Definitionen: Aufzählung festgelegter Definitionen von Fachbegriffen. Algorithmus Ein Algorithmus ist eine präzise, endliche Beschreibung eines allgemeinen Verfahrens unter Verwendung endlich vieler ausführbarer elementarer Verarbeitungsschritte. Programmiersprachen Eine Programmiersprache ist eine zur Abfassung von Programmen geschaffene Sprache (DIN 44300). 3. Abkürzungen: Gebräuchliche Abkürzungen im Umgang mit PS. ASCII American Standard Code of Information Interchange BASIC Beginners All purpose Symbolic Instruction Code Bit Binary Digit BNF Backus-Naur-Form PAP Programmablaufplan 4. Wertebereiche und Größen: Angaben zu festgelegten Größen und Umrechneinheiten. ASCII-Code ANSI-Code 1 Byte 1 Kilobyte 1 Megabyte 8 Bit 16 Bit 8 Bit 1024 Byte 1024 Kilobyte Seite 3 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck 06.01.2001 FH-Wedel Angaben zu vordefinierten Datentypen. Datentyp: Wertebereich: Speicherbedarf: signifikante Stellen: Cardinal* (16 Bit) Integer (16 Bit) Cardinal* (32 Bit) Integer* (32 Bit) ShortInt Byte SmallInt* Word LongInt Char AnsiChar WideChar Real, Real48* Single Double Extended 0..65535 -32768..32767 0..4294967295 -2147483648..2147483647 -128..127 0..255 -32768..32767 0..65535 -2147483648..2147483647 16 Bit ohne Vorzeichen 16 Bit mit Vorzeichen 32 Bit ohne Vorzeichen 32 Bit mit Vorzeichen 8 Bit mit Vorzeichen 8 Bit ohne Vorzeichen 16 Bit mit Vorzeichen 16 Bit ohne Vorzeichen 32 Bit mit Vorzeichen 8 Bit 8 Bit 16 Bit 6 Byte 4 Byte 8 Byte 10 Byte 11-12 7-8 15-16 19-20 2.9 * 10-39 .. 1.7 * 1038 1.5 * 10-45 .. 3.4 * 1038 5.0 * 10-324 .. 1.7 * 10308 3.4 * 10-4951 .. 1.7 * 104932 *) in TurboPascal nicht verfügbar 5. Aussagen und Erklärungen: Algorithmen: Ein Algorithmus ist eine präzise, endliche Beschreibung eines allgemeinen Verfahrens unter Verwendung endlich vieler ausführbarer elementarer Verarbeitungsschritte. Grundstrukturen von Algorithmen: Sequenz, Selektion, Iteration Struktogramme: + Aktion Sequenz realisiert durch: - Alternative oder bed. Anweisung (nur + Zweig) (If-Anweisung) 1 2 - Mehrfach-Auswahl Iteration mit Eintrittsbed. Iteration Mit Abbruchbed. (Case-Anweisung) (While-Do) (Repeat-Until) Programmiersprachen: Aspekte von (Programmier-)Sprachen: Syntax, Semantik, Pragmatik Der Compiler kann nur Programme übersetzten, die aus syntaktisch absolut korrekten Zeichenfolgen bestehen. Syntax besteht aus einer Menge von terminalen- und nichtterminalen Symbolen sowie Regeln. Seite 4 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck 06.01.2001 FH-Wedel Syntax von Programmiersprachen: Darstellung von Syntaktischen Regeln durch Syntaxdiagramme und Backus-Naur-Form. Bezeichnung: Backus-Naur-Form: Terminales Symbol A oder “A“ Nichtterminales Symbol <A> Sequenz a<B>c Syntaxdiagramm: A A a z Regel <z> ::= <x>A Alternativen <a>|<b>|<c> c B x A a b c Option b [<a>]<b> a Iteration (Wiederholung) x <x>{<y>}* B y B 1 Iteration mit Option x * <x>{<y>} B B 0 y Datentypen: 1. Unterscheidung: Einfache Datentypen: Jeder Wert ist atomar Strukturierte Datentypen: Jeder Wert ist aus Werten anderer (einfacher) Datentypen zusammengesetzt. 2. Unterscheidung: Vordefinierte Datentypen: Von der Programmiersprache zur Verfügung gestellt. Benutzerdefinierte Datentypen: Durch Programmierer zusätzlich geschaffen. Weiter Unterscheidungsmerkmale: ordinale und reelle Datentypen, sowie generischen und fundamentalen Datentypen. Seite 5 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck FH-Wedel 06.01.2001 Ordinale Datentypen: 1. Ganze Zahlen: I. Binäre arithmetische Operatoren: + * div mod Addition Subtraktion Multiplikation ganzzahlige Division Rest der ganzzahligen Division II. Unäre Operatoren: + - positives Vorzeichen negatives Vorzeichen 2. Boolesche Werte: Ordnung der Werte: Werte belegen 1 Byte False < True I. Binäre boolesche Operatoren: and or xor Liefert true nur wenn beide Operanden true sind. Liefert true wenn mindestens einer der Operanden true ist. Liefert true wenn beide Operanden verschieden sind. II. Unäre boolesche Operatoren: not Negation true wird zu false und false wird zu true 3. Zeichen: Zeichen sind Ordinale Datentypen. Char ist generisch. AnsiChar und WideChar sind fundamental. Erzeugung von Zeichen mittels Ordinalwert: #65 oder Chr (65) jeweils für ein ‚A’ (ASCII-Werte) UpCase Funktion zum wandeln von Klein- in Großbuchstaben. Funktionen für Ordinaltypen: Diese Funktionen sind in Pascal vordefiniert und funktionieren bei jedem ordinalen Datentypen: ord pred succ low high liefert Ordinalzahl liefert den Vorgängerwert (Ordinalzahl) liefert den Nachfolgerwert (Ordinalzahl) liefert kleinsten Wert (Ordinalzahl) liefert höchsten Wert (Ordinalzahl) String-Typ: String-Typen beschreiben Wertebereiche für Zeichenfolgen dynamischer Länge. In TurboPascal gibt es sogenannte „kurze“ String-Typen mit einer maximalen Länge von 255 Zeichen. Durch explizite Angabe von Zeichen (<255) kann die Maximallänge reduziert werden. I. Binäre Operatoren: + Stringverknüpfung 'ab' + 'cd' = 'abcd' II. Relationale Operatoren: = , < , <= , > , >= , <> Die Rangfolge zweier String-Werte beim Vergleich wird durch die Wertigkeit der Zeichen an übereinstimmenden Positionen bestimmt. III. Vordefinierte Prozeduren und Funktionen zur Bearbeitung von Strings: S – (Ausgangs) String Index – Startposition Count – Anzahl Zeichen Source – einzufügender S. Substring – zu suchender S. Seite 6 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck FH-Wedel Concat Copy Delete Insert Length Pos 06.01.2001 Funktion zur Verbindung von Strings. Concate (S1, S2, ..., Sn) Funktion zum kopieren von Zeichen aus Strings. Copy (S, Index, Count) Prozedur zum löschen von Zeichen aus Strings. Delete (S, Index, Count) Prozedur zum einfügen von Strings in Strings. Insert (Source, S, Index) Funktion zum ermitteln der aktuellen dynamischen Länge. Length (S) Funktion durchsucht String nach Teilstring. Pos (Substring, S) - Ergebnis ist die Position des ersten Zeichens in String. - Ergebnis ist 0, wenn Substring nicht im String enthalten. IV. Prozeduren zum Umwandeln von Strings in Zahlen und umgekehrt: Str Val Wandelt den arithmetischen Ausdruck X in String S um. Eine Formatierung ist Möglich. Str (X, S) Wandelt einen String S in die Zahl V um wenn der String die Form eines zulässigen Zahlenformates (Integer) aufweist. Ansonsten wird die Position des ersten unzulässigen Zeichens in Code zurückgeliefert. Val (S, V, Code) Reelle Datentypen: Darstellung der Zahl durch 4 ganzzahlige Werte: Vorzeichen (s), Mantisse (m), Basis (b), Exponent (e). Wert der Zahl ergibt sich aus : s * m * be Basis b implizit für alle reellen Werte festgelegt. Binäre arithmetische Operationen: + * / Addition Subtraktion Multiplikation Division Vordefinierte arithmetische Funktionen für Reelle Zahlen: jeweils anzuhängen (x) und „von x“ abs Betrag sqr Quadrat sqrt Quadratwurzel sin Sinus (Ergebnis im Bogenmaß) cos Cosinus arctan Arcustangens exp ex ln natürlicher Logarithmus int ganzzahliger Anteil frac Nachkommastellen Vordefinierte Funktionen zum Umwandeln einer Gleitkommazahl in eine ganze Zahl: round (x) Wandlung durch runden zur nächstliegenden, ganzen Zahl. Wenn die reelle Zahl genau in der Mitte liegt, wird die Zahl mit dem größeren Absolutwert zurückgegeben. trunc (x) Wandlung durch abschneiden der Nachkommastellen. Seite 7 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck 06.01.2001 FH-Wedel Benutzerdefinierte ordinale Datentypen: 1. Aufzählungstypen: Aufzählung aller Werte, die eine Variable dieses Typs annehmen kann. Die Werte müssen Bezeichner sein! type Grundfarben = (rot, gelb, gruen); Beispiele: var Zustand : (an, aus); Nutzung der Standardfunktionen für Ordinaltypen (succ, pred, ord...). 2. Teilbereichstypen: Einschränkung des Wertebereichs der ordinalen Basistyps. Zu beachten ist, dass die Schranken in Form von Konstanten angegeben werden und dass die unter Schranke nicht größer als die obere ist. type Lottozahlen = 1..49 Beispiel: Es können auch Konstanten aus benutzerdefinierte Aufzählungstypen gewählt werde, solange sie vor dem Teilbereichstypen deklariert wurden. type Farben = (rot, gelb, blau, weiss, gruen); Farbauswahl = gelb..weiss; Beispiel: Strukturierte Datentypen: 1. Array-Datentyp: Arrays fassen eine feste Anzahl von Elementen eines anderen Datentyps zu einem neuen Datentypen zusammen. Die einzelnen Elemente können über Indizes lesend und schreibend angesprochen werden. Zur Deklaration müssen die Wertebereiche der Indizes und der Basistyp der Elemente angegeben werden. type Zahlenvektor = array [1..50] of integer; Messwerte = array [byte] of real; Beispiele als Typ: Beispiele als Variable: var Anzahl_Noten : array [0..15] of integer; Messungen : array [0..100] of Messwerte; Beispiele für Zuweisung: Anzahl_Noten[15] := 1; Anzahl_Noten[0] := Anzahl_Noten[8] + 1; 2. Mehrdimensionale Arrays: Beispiel: oder: type TKalender = array [1..12] of array [1..31] of boolean; type TKalender = array [1..12, 1..31] of boolean; Beispiel für Zuweisung: TKalender[5, 30] := true; Typendeklaration: Die Typendeklaration wird durch das Schlüsselwort Type eingeleitet. Für <Typ> können vordefinierte Typenbezeichner oder benutzerdefinierte Datentypen beschrieben werden. Typendeklaration Beispiele: = Bezeichner type Typ Wochentage = 1..7; Kleinbuchstaben = 'a'..'z'; Stueckzahl = byte; Name = String [10]; Seite 8 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck 06.01.2001 FH-Wedel Variablendeklaration: Begriffe in Bezug auf Variablen: Name Datentyp Ort Wert Intern Wert Extern Bezeichner der die Variable repräsentiert. Art der Daten (Wertebereich), Speicherbedarf. Adresse im Speicher (erstes belegtes Byte). Bitfolge, die an der Speicheradresse zu finden ist. Nach Regeln des Typs interpretierte Bitfolge. Die Variablendeklaration wird durch das Schlüsselwort Var eingeleitet. var Beispiele: Name : String [10]; Operatoren: 1. Arithmetische Operatoren: Binäre und Unäre 2. Logische Operatoren (Boolesche Operatoren) Beide Operanden Boolesch = Übliche, logische Verknüpfung. Beide Operanden Ganzzahlwerte = Verknüpfung der einzelnen Bits der Operanden. 3. Relationale Operatoren (Vergleichsoperatoren) Operanden müssen kompatibel sein. Zahlen nur mit Zahlen, Zeichen nur mit Zeichen vergleichen etc. Reihenfolge der Auswertung: Klammern werden immer zuerst ausgeführt. Steht ein Operand zwischen zwei Operatoren unterschiedlichen Rangs, ist er immer an den höherrangigen gebunden. Haben die Operatoren den gleichen Rang, ist der Operand an den links von ihm stehenden gebunden. Auswertung erfolgt bei gleichrangigen Operatoren von link nach rechts. Rangfolge der Operatoren: Operatoren: not, + , * , / , div, mod, and + , - , or, xor = , < , <= , > , >= , <> Priorität: 1. 2. 3. 4. Kategorie: unäre Operatoren multiplikative Operatoren additive Operatoren relationale Operatoren Anweisungen: 1. Einfache Anweisungen: Zuweisung Prozeduranweisung Goto-Anweisung (nicht zu benutzen!) 2. Strukturierte Anweisung: Verbundanweisung: Begin ... End bedingte Anweisung: If-Then bedingte Anweisung If-Then-Else Alternative Case Mehrfachauswahl Wiederholungsanweisung: Repeat-Anweisung While-Anweisung For-Anweisung with-Anweisung exeption-Anweisung Seite 9 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck FH-Wedel 06.01.2001 Kommentare: Natürlichsprachliche Erläuterungen zu Deklarationen und Anweisungen sowie größeren Programmeinheiten. Kommentare werden vom Compiler nicht übersetzt. Die Kommentierung existier unabhängig von den Inhalten des Programms. Somit sind Inkonsistenzen möglich! Kommentare so wenig wie möglich, aber sooft wie nötig einsetzten. Die Kommentierung sollte parallel zur Programmierung stattfinden. Der Compiler übersetzt keine Texte die in (*...*)-Klammer und {}-Klammern (mit Ausnahme von Compilerbefehlen in der Form {$...} ) stehen. Compiler-Befehle: Sind auch als Compiler-Direktiven bezeichnet. Diese Befehle können überall dort stehen, wo Kommentare zulässig sind. Aufbau der Compilerbefehle: - Öffnender Kommentarbegrenzer { - $-Zeichen - Befehlsname (Buchstabe oder auch lange Bezeichner) - eventuelle Parameter - Schließender Kommentarbegrenzer } 1. Schalterbefehle: Aktivieren oder deaktivieren bestimmte Funktionen des Compilers. Als Parameter sind nur das Plus- und Minuszeichen vorgesehen. I. Globale Befehle: Beeinflussen den gesamten Compiliervorgang. Sie müssen vor dem Deklarationsteil des Programms oder der Unit stehen. {$D+} Debuggerinformationen erstellen II. Lokale Befehle: Beeinflussen den Compiliervorgang nur bis zum nächsten Auftreten des Schalters im Programmtext. Mehrere Befehle können zusammengefasst werden indem man Einzelbefehle durch Kommata trennt. Keine Leerzeichen! {$R+} Lokaler Schalter für Wertebereichsprüfung {$I+} Auslösen von Exceptions bei E/A-Fehlern 2. Parameterbefehle: Übergeben dem Compiler Parameter, die den Compiliervorgang beeinflussen. Vor dem Parameter muss ein Leerzeichen stehen. {$I Dateiname} Einbinden von externen Programmdateien {$L Dateiname} Einbinden von Objektdateien (z. B. Assembler) {$C Attribut...} Festlegen der Attribute von Code-Segmenten Strukturierung von Programmen: Strukturierung durch Prozeduren und Funktionen (Blöcke), Units oder Objekten, Kommentierung, etc. 1. Prozeduren: Prozeduren fassen Anweisungen unter einem Namen zusammen und müssen deklariert werden. Der Aufruf einer Prozedur erfolgt als Anweisung durch Nennung des Prozedurnamens (meinst mit Parameterliste) Prozedurkopf: procedure <name> ( <parameterliste> ); Seite 10 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck FH-Wedel 06.01.2001 2. Funktionen: Funktionen fassen Anweisungen unter einem Namen zusammen und liefern einen Wert als Ergebnis (Funktionswert) zurück. Deklaration notwenig. Funktionskopf: function <name> ( <parameterliste> ) : ergebnistyp Gemeinsamkeiten: Deklaration besteht aus Kopf und Rumpf. Der Datenaustausch mit der Umgebung erfolgt über Parameter. Alle im Deklarationsteil vereinbarten Variablen, Konstanten, Prozeduren etc. sind nur lokal gültig. Die Deklaration muss vor dem Aufruf stehen. Der Aufruf erfolgt über den Namen mit Parameterliste und kann beliebig oft mit unterschiedlichen Parametern erfolgen. Die Aufrufe können auch geschachtelt erfolgen. Unterschiede: Prozeduren fassen eine Folge von Aktionen zusammen, Funktionen liefern hingegen einen Wert. Prozeduren werden durch Nennung des Prozedurnamens mit aktuellen Parameter als Anweisung aufgerufen. Funktionen durch Nennung des Funktionsnamen mit aktuellen Parametern als Teil eines Ausdrucks. Rekursion: Prinzip der Selbstreferenz: In einer Definition eines Objektes wird Bezug genommen auf das zu definierende Objekt. Rekursive Lösungen sind häufig kürzer und eleganter als iterative jedoch meist auch weniger effizient, da da bei jedem rekursiven Aufruf Speicherplatz reserviert und bei Verlassen wieder freigegeben wird. Der Rekursive Abstieg ist somit durch Speicherplatz begrenzt. 1. Direkte Rekursion: A ruft A auf 2. Indirekte Rekursion: A ruft B auf. B ruft C auf. C ruft wieder A auf. Achtung! Ohne wirksame Abbruchbedingung ergibt sich ein „endloser“ rekursiver Abstieg und führt zu einem Laufzeitfehler „Stack Overflow“. Parameter: 1. Unterscheidung: Formale Parameter: Festlegung der Anzahl und Art der Parameter bei der Deklaration. Aktuelle Parameter: Belegung der Parameterpositionen mit Werten bei Aufruf. 2. Unterscheidung: Werteparameter: (call by value) Variablenparameter: Dienen in der Prozedur nur als Eingabeparameter und entsprechen einer lokalen Variablen innerhalb der Prozedur. Als aktuelle Parameter sind auch Ausdrücke zulässig. procedure ausgabe (zeile : cardinal); Dienen in der Prozedur als Ein- und Ausgabeparameter. Es wird nicht der Seite 11 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck FH-Wedel 06.01.2001 (call by reference) Wert sondern die Speicheradresse des aktuellen Parameters übergeben. Daher entsprechen Variablenparameter einer globalen Variablen. Es sind als aktuelle Parameter keine Ausdrücke zulässig. procedure ausgabe (var zeile : cardinal); Konstantenparameter: Dienen ausschließlich als Eingabeparameter und sind unveränderlich. Die formalen Parameter entsprechen innerhalb der Prozedur einer lokalen Variablen. Als aktuelle Parameter sind auch Ausdrücke zulässig. Ausgabeparameter Units: Units enthalten Deklarationen von Programmteilen, wie Variablen, Prozeduren oder Funktionen. In speziellen Fällen auch ausführbare Anweisungsfolgen. Units können von Programmen oder anderen Units zur dortigen Verwendung importiert werden. Units bestehen aus maximal 4 Abschnitten: Interface-Abschnitt Enthält Deklarationen von Programmelementen (für Prozeduren und Funktionen nur den Kopf der Deklaration. Programmelemente im Interface können in Programmen und anderen Units verwendet werden. interface Implementations-Abschnitt Inhalte sind außerhalb der Unit nicht sichtbar. Dieser Teil enthält die Blöcke zu den im Interface genannten Prozeduren und Funktionen und auch weitere, die nur in der Unit benötig werden (lokale Prozeduren und Funktionen). implementation Initializations-Abschnitt Enthält Anweisungen zur Initialisierung der Unit, z.B. Init. von Variablen oder öffnen von Dateien. Diese Anweisungen werden bei der ersten Benutzung ausgeführt. initialization nur ObjectPascal Finilizations-Abschnitt nur ObjectPascal Enthält Anweisungen, die bei Beendigung des Programms ausgeführt werde. Wesentlicher Gegenstand ist die Freigabe von Ressourcen, wie z. B. Dateien, Speicher etc. finalization Interface und Implementation sind obligatorisch, Initialization und Finilization sind optional. Jeder Abschnitt wird durch das entsprechende Schlüsselwort eingeleitet. Jeder Abschnitt endet mit dem Begin des nächsten Abschnittes (mit dem entsprechenden Schlüsselwort). Seite 12 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck 06.01.2001 FH-Wedel 6. Wichtige Syntax case-Anweisung case of Ausdruck Alternative end ; else-Teil Bezeichner Buchstabe Buchstabe Unterstrich Ziffer Unterstrich Ausdruck einfacher Ausdruck = einfacher Ausdruck < <= > >= <> Term Faktor einfacher Ausdruck Term * + / - div or mod xor and ... Seite 13 von 14 v1.8 Programmiersprachen 1 – Zusammenfassung Nico S. Beck 06.01.2001 FH-Wedel Faktor Variablenreferenz Vorzeichenlose Konstante ( Ausdruck not ) Faktor Ausdruck Faktor Funktionsaufruf ... Seite 14 von 14 v1.8