Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 1 Gisbert Dittrich; Claudio Moraga FBI Unido

Ähnliche Präsentationen


Präsentation zum Thema: "EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 1 Gisbert Dittrich; Claudio Moraga FBI Unido"—  Präsentation transkript:

1 EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 1 Gisbert Dittrich; Claudio Moraga FBI Unido

2 Kapitel 1: Erste Schritte Vorl EINI-I" Gliederung Kap. 1 Vorgehensweise bei Programmkonstruktion Grundlegendes Scenario Erstes Programm... Elementare Datentypen... Einführung zu kontextfreien Grammatiken

3 Kapitel 1: Erste Schritte Vorl EINI-I" Übliche Vorgehensweise bei der Programmkonstruktion Programm-Wartung und Pflege Analyse des Problems Entwurf einer Lösung Test/Verifikation des Programms Problem Programm Realisierung eines Programms

4 Kapitel 1: Erste Schritte Vorl EINI-I" Zur Realisierung eines Programms Idee zur Lösung eines Problems Formulierung eines Programms ausführbares Programm (Maschinensprache) Übersetzung Laufzeit- System Aus- führung Bibliotheken

5 Kapitel 1: Erste Schritte Vorl EINI-I" Erstes C++-Programm Prog-1

6 Kapitel 1: Erste Schritte Vorl EINI-I" Erstes C++ - Programm - Anatomie int main() { int hoehe = 3;int grundseite = 5; double flaeche = grundseite * hoehe * 0.5; cout << "Flaeche des Dreiecks: " << flaeche << '\n'; return 0; } Vereinbarungen Rechnung Ausgabe Rückgabewert Haupt- programm

7 Kapitel 1: Erste Schritte Vorl EINI-I" Erstes C++ - Programm (Forts.) Lexikalische Elemente des Programms Bezeichner Schlüsselwörter/Interpunktion Literalkonstanten Operatoren (Liste: s. u.) Trenner: Leerzeichen, \t (d. h. Tabulatoren), Zeilenendezeichen \n, Seitenvorschübe, Kommentare

8 Kapitel 1: Erste Schritte Vorl EINI-I" Erstes C++ - Programm (Forts.) Kommentare /*---*/ mehrere Zeilen // bis Zeilenende Bezeichner Buchstabe gemäß Bauplan Bezeichner Buchstabe Bezeichner ZifferOderSo Hierbei –Buchstabe: a... z A Z, –ZifferOderSo: _ Interpretation ? Unterstrich

9 Kapitel 1: Erste Schritte Vorl EINI-I" Erstes Beispiel (Forts.) Randbedingungen: –Schlüsselwörter/Interpunktion: s. Liste Schlüsselwörter sind reserviert und dürfen nicht als Bezeichner verwendet werden. –Operatoren: s. Liste (= Zeichenfolgen mit vordefinierter Bedeutung)

10 Kapitel 1: Erste Schritte Vorl EINI-I" Schlüsselwörter in C++ Die folgenden Schlüsselwörter sind in C++ reserviert und dürfen nicht anderweitig (z. B. als Bezeichner) benutzt werden: asmdoinline shorttypeid autodoubleint signedtypename booldynamic_castlong sizeofunion breakelsemutable staticunsigned caseenumnamespace static_castusing catchexplicitnew structvirtual charexternoperator switchvoid classfalseprivate templatevolatile constfloatprotected´ thiswchar_t const_castforpublic throwwhile continuefriendregister true defaultgotoreinterpret_cast try deleteifreturn typedef main Eine Art abgekürzter Schlüsselwörter sind die Interpunktionszeichen von C++: ; { }, ( ) :... = \ ´ "

11 Kapitel 1: Erste Schritte Vorl EINI-I" Operatoren in C++ In C++ steht eine Vielzahl von Operatoren zur Verfügung - das sind Symbole, die verschiedene Operationen auf ihren Argumenten, den sog. Operanden, ausführen: ! % ^ & * () ­ + = | ~ [] ?: / ¸ · ­> ++ ­­ ·* ­>* > = == != && || *= /= %= += ­= >= &= ^= |= ::

12 Kapitel 1: Erste Schritte Vorl EINI-I" Header-Dateien: –dienen dazu, an anderer Stelle definierte Bezeichner bekannt zu machen (z. B. ist cout in der Datei iostream.h definiert). –Der Kenner weiß: –#include : die ist in einem festen, vordefinierten Verzeichnis zu finden –#include "... " : die wird zunächst im aktuellen Verzeichnis, dann im o.g. vordefinierten Verzeichnis gesucht Was passiert eigentlich bei #include ? Erstes Beispiel (Forts.)

13 Kapitel 1: Erste Schritte Vorl EINI-I" Elementare Datentypen C++ hat fest eingebaute Datentypen, aus denen alle anderen zusammengesetzt werden können. Vordefiniert sind –der Typ void –arithmetische Typen ganzzahlige Typen : short int, int, long int, char Gleitpunkttypen: float, double, long double Kleinster Typ ist char, stellt die Zeichen des Zeichensatzes dar (meist ASCII)

14 Kapitel 1: Erste Schritte Vorl EINI-I" Elementare Datentypen (Forts.) Standardfunktion sizeof gibt für jeden Typ seine Größe (als Vielfaches der Größe von char ) an. Es gilt stets : 1 = sizeof(char) sizeof(short int) sizeof(int) sizeof(long int) Prog-2

15 Kapitel 1: Erste Schritte Vorl EINI-I" Elementare Datentypen (Forts.) Eingebaut sind für ganzzahlige Typen und für Gleitpunkttypen Konstanten, die jeweils die größte und kleinste darstellbare Zahl angeben: Beispiel: Beachte: #include #include Prog-3

16 Kapitel 1: Erste Schritte Vorl EINI-I" unsigned char vs. signed char unsigned short int vs. signed short int unsigned int vs. signed int unsigned long int vs. signed long int Unsigned: –Wertebereich beginnt bei 0 –doppelt so große Obergrenze wie entsprechender signed -Typ –ohne Angaben: vorzeichenbehaftete (also signed ) Version Prog-2A Bei ganzzahligen Typen: Variante unsigned/signed, also: Bei ganzzahligen Typen: Variante unsigned/signed, also:

17 Kapitel 1: Erste Schritte Vorl EINI-I" unsigned (Forts.)/ float Es gilt: sizeof (T) = sizeof (unsigned T) = sizeof (signed T) Behandlung ziemlich maschinenabhängig

18 Kapitel 1: Erste Schritte Vorl EINI-I" Datentyp void Datentyp void : –hat leere Wertemenge –also gibt es keine Variablen vom Typ void ! Dennoch nützlich zur: –Beschreibung von Funktionen, die keinen Wert zurückgeben.

19 Kapitel 1: Erste Schritte Vorl EINI-I" Anmerkungen zum Thema Variablen char x legt fest, daß der Wert von x ein Zeichen ist. Technisch: im Speicher wird für x eine Speicherzelle reserviert, und es wird vermerkt, daß diese Speicherzelle nur Daten von Typ char aufnehmen darf. die Zuweisung: x = 'a' bewirkt, daß dieser Wert in der Speicherzelle für x gespeichert wird.

20 Kapitel 1: Erste Schritte Vorl EINI-I" Variablen (Forts.) hier wird ein Datum vom Typ char gespeichert die Vereinbarung char x bewirkt: x Reservierung einer Speicherzelle die Zuweisung x = 'a' bewirkt a

21 Kapitel 1: Erste Schritte Vorl EINI-I" Variablen (Forts.) 'a' y hier wird ein Datum vom Typ char gespeichert... x hier wird ein Datum vom Typ char gespeichert... char x, y; x = ' a '; y = x; hat als Wirkung: a a

22 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in die Verwendung von Grammatiken Ziel: Beschreibung von (Teilen von) syntaktisch korrekten C++-Programmen (über [speziell dargestellte] kontextfreie Grammatiken). Konkreter: Sie sollten lernen, die im Ellis-Stroustrup in Kap. 17 beschriebene Grammatik am Ende der Veranstaltung lesen und für Ihre Zwecke verwenden zu können.

23 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in die Beschreibung mittels (kontextfreier) Grammatiken Einführung in die Beschreibung mittels (kontextfreier) Grammatiken Zu obigem Ziel nötig: –Sei A = {a 1, a 2,....., a n } eine endliche Menge von Zeichen (Alphabet). Beispiel: A 1 := {0,1,2} Vorsicht: Zeichen eines Alphabets können selbst zusammengesetzt sein! –Sei A* die Menge aller endlichen Wörter über dem Alphabet A. Am Beispiel: A 1 * := {0, 1, 2, 00, 01, 02, 10,...., 000, 001, 002,..., 100,.., 0000,..}

24 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken –Das Hintereinanderhängen von Zeichen wird häufig -wie auch hier- ohne ein explizites Operatorzeichen, also allein durch das Hintereinanderschreiben von links nach rechts ausgedrückt. –Länge eines Wortes aus A*: Anzahl der vorhan- denen Zeichen/Buchstaben unter Berücksichtigung der Vielfachheit des Vorkommens. –Man nimmt auch das sog. "leere" Wort der Länge 0, z. B häufig bezeichnet durch, hinzu!

25 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Aufgabe: –Zu einem gegebenen Alphabet A (Menge von Zeichen) beschreibe eine geeignete Teilmenge von A* in möglichst kompakter Form. –Beispiel: Sei T(A 1 *): Menge aller Wörter, die mit einer 1 beginnen und einer 1 enden, sonst aber keine 1 mehr aufweisen. Kompakte Darstellung? –(Übung: Darstellung über [speziell dargestellte] kontextfreie Grammatik).

26 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Eine Lösung: –Je eine (kontextfreie) Grammatik G beschreibt eine ausgezeichnete Teilmenge der Menge aller Zeichenketten über einem gegebenen Alphabet (den Terminalzeichen T). Dies geschieht durch einen Erzeugungsprozeß. Die durch diesen Erzeugungs- prozeß eindeutig festgelegte Teilmenge von T* heißt "Sprache" von G.

27 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Darstellung der Grammatik: –Als 4-Tupel (N, T, P, S) aus endlicher Menge von Nichtterminalzeichen (N), endlicher Menge von Terminalzeichen (T), endlicher Menge von Produktionen/Regeln (P) und Startsymbol (S). –(Meist nur explizite Angabe der Produktionen.) Hilfsgrößen: (sog. Nichtterminale) hier notiert durch Bezeichner. Stellen "Zwischengrößen" dar, die durch weitere Anwendung von Regeln (im Endeffekt) in Wörter über Terminalzeichen überführt werden. Wie? Vgl. unten.

28 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Regeln (Produktionen): [Darstellung angepaßt an Ellis-Stroustrup, Kap. 17] –Allgemeiner Aufbau einer Regel Linke Seite : Rechte Seite Linke Seite wird durch genau ein Nichtterminal- zeichen gebildet. Beispiel: Bezeichner1 Rechte Seite: i. a. Wort über (N T), d.h. (N T)*. –[Später werden zusätzliche Sonderzeichen erlaubt, s.u.]

29 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Eine Regel –beschreibt die Überführung von Nichtterminalzeichen (dargestellt auf der linken Seite :) in Wörter aus Terminal- und/oder Nichtterminalzeichen. Startsymbol: –stellt das Nichtterminalzeichen dar, von dem aus sog. Ableitungen gestartet werden. Zu Ableitungen später nach Einführung eines Beispiels. Kommentare –wollen wir (u.a.) durch /*... */ notieren.

30 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Beispiel: –Grammatik für zulässige Namen (nach der Namenskonvention von C++ (eingeschränkt)) Menge der Terminalzeichen = {a,..., z, A,..., Z, 0,...,9, _} Menge der Nichtterminalzeichen: {NameDcl, Buchstabe, RestNameOpt, RestName, Ziffer} [Nichtterminalzeichen werden also kursiv dargestellt. Vorsicht: Nichtterminal"zeichen" können also selbst aus mehreren Zeichen bestehen !]

31 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Beispiele für Regeln (in dieser Beispielgrammatik): Buchstabe : Diese drei Regeln werden a zusammengefaßt zu: Buchstabe : b a Buchstabe : b c oder auch: Buchstabe : one of a | b | c

32 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken RestName : Buchstabe RestName RestName wird abgeleitet zu Buchstabe, gefolgt von RestName. bedeutet:

33 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken 1 NameDcl : Buchstabe RestNameOpt 2Buchstabe : one of A |... | Z | a |... | z| _ 3RestNameOpt : one of RestName | /* ist "leeres Wort" */ 4RestName : Buchstabe | Ziffer Buchstabe RestName Ziffer RestName 5Ziffer : one of 0|... |9

34 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Startsymbol: NameDcl Beispiele von Ableitungen (immer Start mit NameDcl ) : Abgeleitet:Verwendete Regel: 1. NameDcl/*NameDcl :Buchstabe RestNameOpt */ Buchstabe RestNameOpt/*Buchstabe: A|.... */ A RestNameOpt /*RestNameOpt :RestName | */ A/*A T*; A ist durch diese Grammatik ableitbarer Bezeichner */

35 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken 2. NameDcl/* NameDcl : Buchstabe RestNameOpt*/ Buchstabe RestNameOpt/*Buchstabe : a |...|z |A |... |Z|_*/ N RestNameOpt /*RestNameOpt : RestName| */ N RestName /*RestName :.. |Buchstabe RestName|..*/ N Buchstabe RestName /*Buchstabe : a |...|z |A |... |Z|_*/ Nr RestName /*RestName :.. |Buchstabe RestName|..*/ Nr Buchstabe RestName /*Buchstabe : a |...|z |A |... |Z|_*/ Nr_RestName /*RestName :.. | Ziffer RestName */ Nr_Ziffer RestName /*RestName :.. | Ziffer RestName */ Nr_ Ziffer Ziffer RestName/* RestName :.. |Ziffer|...*/ Nr_ Ziffer Ziffer Ziffer /* Ziffer : 0 |... |9*/ Nr_ Ziffer 0 Ziffer /* Ziffer :0 |... |9*/ Nr_Ziffer 07/*Ziffer :0 |... |9*/ Nr_007 /* abgeleiteter Bezeichner, da nur noch Terminale !*/

36 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Man spricht von der Ableitung eines Wortes w = t 1...t n (t i Terminalzeichen (!!) für i = 1,..., n; n 0), wenn sich w aus dem Startsymbol durch endlich viele Anwendungen von Regeln der Grammatik (, d.h. jeweils durch lokales Ersetzen von Nichtterminalzeichen auf der linken Seite durch (evtl. Teile) einer Zeile der rechten Seite einer Regel) erzeugen läßt.

37 Kapitel 1: Erste Schritte Vorl EINI-I" Einführung in Grammatiken Die durch eine Grammatik G erzeugte Wortmenge: Menge aller Wörter (allein) aus Terminalzeichen, zu denen Ableitungen in G existieren. Übung: Sind Variable1, 1.Variable, 1_Variable, Variable_1 ableitbare Namen gemäß obiger Grammatik?

38 Kapitel 1: Erste Schritte Vorl EINI-I" Regeln in Stroustrup-Grammatik /*Expressions, kleiner Auszug aus der Gesamtgramma- tik von C++, vgl. Stroustrup, Kap.17.2*/ expression:additive-expression more additive-expression:multiplicative-expression additive-expression + multiplicative-expression additive-expression - multiplicative-expression multiplicative-expression: primary-expression multiplicative-expression * primary-expression multiplicative-expression / primary-expression multiplicative-expression % primary-expression

39 Kapitel 1: Erste Schritte Vorl EINI-I" Regeln in Stroustrup-Grammatik primary-expression: literal more ( expression ) name name:identifier more literal:integer-constant character-constant floating-constant string-literal

40 Kapitel 1: Erste Schritte Vorl EINI-I" Ableitung in Stroustrup-Grammatik Frage: Ist "( x +5 )" ein Ausdruck (Expression) ? Ableitung: expression /* expression:additive-expression*/ additive-expression /*additive-expression:multiplicative-expression*/ multiplicative-expression /*multiplicative-expression: primary-expression*/ primary-expression /* primary-expression: ( expression )*/ ( expression ) /* expression:additive-expression*/ ( additive-expression ) /*additive-expression: additive-expression + multiplicative- expression*/

41 Kapitel 1: Erste Schritte Vorl EINI-I" Ableitung in Stroustrup-Grammatik ( additive-expression + multiplicative-expression ) /* additive-expression: multiplicative-expression*/ ( multiplicative-expression + multiplicative-expression ) /*multiplicative-expression: primary-expression*/ 2X ( primary-expression + primary-expression ) /*primary-expression: literal |name*/ 2X ( name + literal ) /* name: identifier */ ( x + literal )/* literal: integer-constant */ ( x + 5 ) /*Hurra !!!*/


Herunterladen ppt "EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 1 Gisbert Dittrich; Claudio Moraga FBI Unido"

Ähnliche Präsentationen


Google-Anzeigen