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 Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido

Ähnliche Präsentationen


Präsentation zum Thema: "EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido"—  Präsentation transkript:

1 EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido dittrich@cs.uni-dortmund.de

2 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 2 9.12.1999 Gliederung Kapitel 4 Vereinbarungen + Gültigkeit –Vorweg: Beispiel Längste Zeile bestimmen +... –Beispiel: Aufteilen auf 4 Dateien 1 –Vereinbarungen –Gültigkeit –Beispiel: Aufteilen auf 4 Dateien 2 –Namensanalyse –Zwiebelschalen –Statische Variablen

3 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 3 9.12.1999 Beispiel: Längste Zeile bestimmen Problem: Möchte in unserem Text die längste Zeile kennenlernen und mit ihrer Länge ausgeben. Längste Zeile bestimmen

4 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 4 9.12.1999 Beispiel: lokale Variablen int LiesZeile(char [], int); void Kopiere(char [], char []); int main() { const int LaengsteLaenge = 1000; int len, maxLaenge = 0; char Zeile[LaengsteLaenge]; char LaengsteZeile[LaengsteLaenge]; while (...) {... } cout <<... << endl;... } lokal

5 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 5 9.12.1999 Anmerkungen zum Programm Die formalen Parameter s[ ], von[ ], nach[ ] in LiesZeile/Kopiere sind als Felder gekennzeichnet, deren Länge erst beim Aufruf durch den aktuellen Parameter bekannt gegeben wird. Das ist praktisch: Bei der Vereinbarung einer Funktion muß die Länge eines Feldes, falls es als Parameter übergeben wird, noch nicht bekannt sein. Damit kann man Funktionen allgemeiner schreiben.

6 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 6 9.12.1999 Zeichenketten Bei Feldern mit dem Grundtyp char ist letztes Zeichen stets das Zeichen ' \0' [Konvention!]. Eine Zeichenkette wort mit genau n Buch- staben sollte dann so vereinbart werden: char wort[n+1]; Es sollte dann gesetzt werden wort[n] = '\0'. cin, cout können auf ganzen Zeichenketten arbeiten. cin überliest '\t', '\n' sowie Leerzeichen.

7 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 7 9.12.1999 Zeichenketten Konstante Zeichenketten werden in ".." notiert –Bsp.: const char t[ ] = "aha, sagte er"; "a" vs. 'a' : – "a" ist eine Zeichenkette der Länge 1, –'a' ist ein Zeichen, '\0' fehlt ! a\0

8 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 8 9.12.1999 Beispiele void Kopiere(char von[], char nach[]) { int i = 0; const char Null = '\0'; while (von[i] != Null) { nach[i] = von[i]; ++i; } nach[i] = von[i]; // Hier wird das Ende-Zeichen gesetzt } Effekt: die Zeichenkette von wird in die Zeichenkette nach kopiert. Vereinbare im folgenden Null als '\0':

9 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 9 int laenge (char q[]) { int i = 0; while (q[i] != Null) i++; return i; } Berechnet die Länge der als Argument übergebenen Zeichenkette. Beispiele

10 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 10 int isLower(char); // Funktionsprototyp void ToUpper (char s[ ]) { char c, Null = '\0'; int i = 0; c = s[i]; while (c!= Null) { if(isLower(c)) s[i] = c - 'a' + 'A'; i++; c = s[i]; } } ersetzt jeden Kleinbuchstaben durch den entsprechenden Großbuchstaben. Beispiele

11 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 11 hierbei: int isLower(char c) { return ((c >= 'a') && (c <= 'z')); } Die Funktion isLower überprüft, ob ein Buchstabe ein Kleinbuchstabe ist Beispiele

12 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 12 void concat (char s[],char t[],char r[]) { int off, i=0; const char Null ='\0'; while ((r[i] = s[i]) != Null) i++; off = i; i = 0; while ((r[off+i] = t[i])!= Null) i++; } Verkettet (Konkateniert) s und t zu r (d. h. nach concat ("123", "abc", g) hat g die Zeichenkette "123abc" zum Inhalt) Beispiele

13 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 13 Vergleich Z_Ketten Beispiele (Forts.) Vergleiche von Zeichenketten mit strcmp, wobei der Vergleich lexikographisch durchgeführt wird –also wie im Lexikon: Abraham steht for Bebra, Eigenheit steht vor Eigensinn Programm

14 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 14 (a ? b : c) ist ein Ausdruck mit a != 0: Wert b a == 0: Wert c Also: y = ( x > 0 ? 3 : 7); ist gleichwertig zu if ( x > 0) y = 3; else y = 7; Der ?-Operator

15 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 15 y = ( x > 0 ? ( z < 7? 17 : z + 7) : x - 9) ist gleichwertig zu if (x > 0){ if ( z < 7) y = 17; else y = z + 7; } else y = x - 9; Kompakte Schreibweise. Lesbarkeit? Der ?-Operator

16 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 16 Beispiel: Programm-Stücke in 4 Dateien abgespeichert –Hauptprogramm:längste Zeile –Funktion LiesZeile –Funktion Kopiere –Fkt-Prototypen Beispiel: Zerlegung in 4 Dateien 1

17 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 17 9.12.1999 Beispiel: Zerlegung in 4 Dateien 1 Verbindung der Dateien über Linker:

18 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 18 Vereinbarungen von Namen Man unterscheidet in C++ für Namen die Deklaration von der Definition: –Deklaration: informiert den Compiler über den Typ einer Variablen –Definitionen: informiert den Compiler über Speicherplätze, Werte etc

19 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 19 int x; const double z = 3.3; sind Definitionen, denn Speicherplätze und ggf. Werte werden dadurch festgelegt. Vereinbarungen

20 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 20 extern float x; ist eine Deklaration: x ist vom Typ float, aber an anderer Stelle definiert: weder Speicherbereich noch ein Wert werden an dieser Stelle festgelegt. Der Name wird lediglich mit seinem Typ bekanntgemacht, u.a. damit der Compiler seine korrekte Verwendung überprüfen kann. Vereinbarungen

21 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 21 Sichtweise des Compilers Information darüber, welche Art von Speicherbereich die Variable x einnehmen wird: das geschieht in der Deklaration für x Zuweisung des Speicherbereichs für x: das geschieht in der Definition für x ein Name kann nur einmal definiert, aber oft deklariert werden.

22 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 22 Gültigkeit von Dekls und Defs Gültigkeit bedeutet: Bezug auf eine sichtbare Definition. Jede Variable muß vor ihrer Benutzung definiert sein. Preisfrage: wann ist eine Definition sichtbar? –Die Regeln zur Sichtbarkeit bestimmen, wann eine Benutzung an eine Definition gebunden ist.

23 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 23 Gültigkeit etc. Definitionsbereiche sind: –Funktionsdefinitionen für lokale Variablen –Dateien Dateien sind Namensräume: Alle dort definierten Variablen sehen die Definition –Extern: mit extern kann auf Namen Bezug genommen werden, die in anderen Dateien definiert sind [in Dateien, nicht in den Funktionen!].

24 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 24 Beispiel: Programm-Stücke in 4 Dateien 2 abgespeichert –Hauptprogramm: längste Zeile –Funktion LiesZeile –Funktion Kopiere –Fkt-Prototypen Beispiel: Gültigkeit

25 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 25 void Kopiere() { const char Null = '\0'; int i=0; extern char Zeile[], LaengsteZeile[]; while (Zeile[i] != Null) { LaengsteZeile[i] = Zeile[i]; ++i; } LaengsteZeile[i] = Zeile[i]; } Kopiere.cpp

26 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 26 int LiesZeile() { const char Null = '\0', Ende = '@', ZeilenEnde = '\n'; char c; int i; extern int LLaenge; extern char Zeile[];... } lokal extern LiesZeile.cpp int LiesZeile() { const char Null = '\0', Ende = '@', ZeilenEnde = '\n'; char c; int i; extern int LLaenge; extern char Zeile[];... } int LiesZeile() { const char Null = '\0', Ende = '@', ZeilenEnde = '\n'; char c; int i; extern int LLaenge; extern char Zeile[];... }

27 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 27 längste_Zeile.cpp const int LaengsteLaenge = 1000; char Zeile[LaengsteLaenge], LaengsteZeile[LaengsteLaenge]; int LLaenge = LaengsteLaenge; int main() { int len, maxLaenge = 0;... } Definition; in der gesamten Datei sichtbar Definition; lokal für main

28 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 28 Namensanalyse LaengsteZeile : –definiert in der Datei für das Hauptprogramm ( main ) also dort mit Speicherplatz versehen –als extern deklariert in der Datei Kopiere.cpp also dort als Name bekannt len : lokal für main ZeilenEnde : lokal für LiesZeile

29 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 29 Zwiebelschalen Namen können innerhalb von Funktionen an beliebiger Stelle definiert werden, –{...} stellen dann Blöcke dar, die ineinander geschachtelt sind. Regel: von innen nach außen beim Ermitteln der jeweils gültigen Definition. Beispiel: Zwiebelschalen

30 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 30 Zwiebelschalen (Bild) int c = -568; int main() { cout << "c zum ersten " << c << endl; float c = 1024.567; { cout << "\tc zum zweiten " << c << endl; char c[] = "ganz innen"; cout << "\t\tc jetzt: " << c << endl; } cout << "\tc jetzt wieder: " << c << endl; }

31 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 31 Statische Variablen Mittelding zwischen globalen und lokalen Variablen: –lokale Variablen leben nur, wenn die Funktion, in der sie deklariert sind, aktiv ist. –statische Variablen leben während der gesamten Laufzeit des Programms, sind aber nur innerhalb ihres Definitionsbereichs zugreifbar. –globale Variablen sind überall im Programm zugreifbar. Statische Variablen Beispiel:

32 Kap 4: Vereinbarungen + GültigkeitVorl EINI-I"Prof. Dr. G. Dittrich 32 Statische Variablen Unterschied zu lokalen Variablen: –statische Variablen behalten ihren Wert zwischen zwei Aufrufen, –lokale Variablen werden bei jedem Aufruf neu angelegt (der letzte Wert geht daher verloren)


Herunterladen ppt "EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido"

Ähnliche Präsentationen


Google-Anzeigen