EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio...
-
Upload
gottlieb-reddin -
Category
Documents
-
view
140 -
download
1
Transcript of EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio...
![Page 1: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/1.jpg)
EINI-IEINI-IEinführung in die Informatik Einführung in die Informatik für Naturwissenschaftler und für Naturwissenschaftler und
Ingenieure IIngenieure I
Kapitel 4
Claudio Moraga; Gisbert Dittrich
FBI Unido
![Page 2: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/2.jpg)
2
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
Gliederung Kapitel 4Gliederung Kapitel 4
• Vereinbarungen + Gültigkeit
– Vorweg: Beispiel Längste Zeile bestimmen + ...– Vereinbarungen– Gültigkeit– Namensanalyse– Zwiebelschalen– Statische Variablen
![Page 3: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/3.jpg)
3
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
Beispiel: Längste Zeile bestimmenBeispiel: 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
![Page 4: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/4.jpg)
4
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
// K4-P1: Laengste Zeile bestimmen//// Liest die Eingabe Zeichen fuer Zeichen, bis // das Endzeichen @ erscheint. // Die laengste Zeile wird ausgegeben (bei mehreren// Kandidaten, die erste).// Demonstriert: Konstanten, Funktionen
#include <iostream.h>#include <stdio.h>
int LiesZeile(char [] , int );void Kopiere(char [] , char [] );
// Es folgt das Hauptprogramm und die zwei Funktionen
// Funktionsprototypen
![Page 5: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/5.jpg)
5
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
main() {const int LaengsteLaenge = 1000;int len, maxLaenge = 0;char Zeile[LaengsteLaenge], LaengsteZeile[LaengsteLaenge];
// Berechnunglen = LiesZeile(Zeile, LaengsteLaenge);while (len > 0) {
if (len > maxLaenge) {maxLaenge = len;Kopiere(Zeile, LaengsteZeile);
}len = LiesZeile(Zeile, LaengsteLaenge);
}//
// Ausgabe der Ergebnisse//cout << "die laengste Zeile hat " << maxLaenge
<< " Zeichen, sie lautet:\n" << LaengsteZeile << endl;}
![Page 6: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/6.jpg)
6
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
// Erste Funktion
int LiesZeile(char s[], int lim) {char c; int i=0;const char Ende = '@', ZeilenEnde = '\n', Null = '\0';
c = getchar(); // Initialisierung für while-Schleife // // Verarbeitung "normaler" Zeichen in einer Zeile // while (i < lim - 1 && c != Ende && c != ZeilenEnde) { s[i] = c; ++i; c = getchar(); }
s[i] = Null;return i;
}
![Page 7: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/7.jpg)
7
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
// Zweite Funktion
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}
• Ausführen
![Page 8: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/8.jpg)
8
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
Beispiel: lokale VariablenBeispiel: lokale Variablen
int LiesZeile(char [], int);
void Kopiere(char [], char []);
main() {const int LaengsteLaenge = 1000;
int len, maxLaenge = 0;
char Zeile[LaengsteLaenge];
char LaengsteZeile[LaengsteLaenge];
while (...) {
... }
cout << ... << endl;
...
}
lokal
![Page 9: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/9.jpg)
9
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
Anmerkungen zum ProgrammAnmerkungen 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.
![Page 10: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/10.jpg)
10
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
ZeichenkettenZeichenketten
• 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.
![Page 11: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/11.jpg)
11
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
ZeichenkettenZeichenketten
• 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
![Page 12: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/12.jpg)
12
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
BeispieleBeispiele
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];
}
Effekt: die Zeichenkette von wird in die Zeichenkettenach kopiert.
Vereinbare im folgenden Null als '\0':
![Page 13: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/13.jpg)
13
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
int laenge (char q[]) { int i = 0;while (q[i] != Null) i++;return i;
}
Berechnet die Länge der als Argument übergebenen Zeichenkette.
BeispieleBeispiele
![Page 14: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/14.jpg)
14
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
int isLower(char); // Funktionsprototypvoid 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 denentsprechenden Großbuchstaben.
BeispieleBeispiele
![Page 15: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/15.jpg)
15
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
hierbei:
int isLower(char c) {
return ((c >= 'a') && (c <= 'z'));
}
Die Funktion isLower überprüft, ob ein Buchstabe ein Kleinbuchstabe ist
Beispiele Beispiele
![Page 16: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/16.jpg)
16
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
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)
BeispieleBeispiele
![Page 17: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/17.jpg)
17
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
Vergleich Z_Ketten
Beispiele (Forts.)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
![Page 18: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/18.jpg)
18
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
// K4-P2: Vergleich zweier Zeichenketten// // Demonstriert den Vergleich zweier Zeichenketten
#include <iostream.h>
int strcmp(char[], char[]);// Funktionsprototyp
main() {char s[] = "Alberich", t[] = "Albert";if (strcmp(s, t) < 0)
cout << "s ist:\t" << s << endl << "t ist:\t" << t << endl << "\ts ist lexikographisch kleiner als t“ << endl;
cout << "\nist \"1\" kleiner als \"a\"? " << (strcmp("1", "a")? "ja": "nein") << endl;
}
![Page 19: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/19.jpg)
19
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
/* Programm der Funktion strcmp zum Vergleich von zwei Zeichenketten */
int strcmp(char s[], char t[]) {int i = 0;while (s[i] == t[i])
if (s[i++] == '\0')return (0);
return (s[i] - t[i]);}
• Ausführen
![Page 20: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/20.jpg)
20
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
(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 ?-OperatorDer ?-Operator
![Page 21: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/21.jpg)
21
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
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 ?-OperatorDer ?-Operator
![Page 22: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/22.jpg)
22
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
Vereinbarungen von NamenVereinbarungen 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
![Page 23: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/23.jpg)
23
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
int x;
const double z = 3.3;
sind Definitionen, denn Speicherplätze und ggf. Werte werden dadurch festgelegt.
VereinbarungenVereinbarungen
![Page 24: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/24.jpg)
24
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
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.
VereinbarungenVereinbarungen
![Page 25: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/25.jpg)
25
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
Sichtweise des CompilersSichtweise 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.
![Page 26: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/26.jpg)
26
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
Gültigkeit von Dekls und DefsGü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.
![Page 27: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/27.jpg)
27
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
Gültigkeit etc. 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!].
![Page 28: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/28.jpg)
28
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
• Beispiel: Programm-Stücke in 4 Dateien 2 abgespeichert– Hauptprogramm: längste Zeile– Funktion LiesZeile– Funktion Kopiere– Fkt-Prototypen
Beispiel: GültigkeitBeispiel: Gültigkeit
![Page 29: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/29.jpg)
29
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
längste_Zeile.cpplängste_Zeile.cpp
const int LaengsteLaenge = 1000;char Zeile[LaengsteLaenge], LaengsteZeile[LaengsteLaenge];int LLaenge = LaengsteLaenge;
int main() {int len, maxLaenge = 0;
...}
Definition;in der
gesamtenDatei
sichtbar
Definition;lokal fürmain
![Page 30: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/30.jpg)
30
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
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.cppKopiere.cpp
![Page 31: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/31.jpg)
31
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
int LiesZeile() {const char Null = '\0',
Ende = '@', ZeilenEnde = '\n';
char c; int i;
extern int LLaenge;extern char Zeile[];
...}
lokallokal
extern
LiesZeile.cppLiesZeile.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[];
...}
![Page 32: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/32.jpg)
32
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
NamensanalyseNamensanalyse
• 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
![Page 33: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/33.jpg)
33
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
Zwiebelschalen 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
![Page 34: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/34.jpg)
34
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
Zwiebelschalen (Bild)Zwiebelschalen (Bild)
#include <iostream.h>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;
}
![Page 35: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/35.jpg)
35
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
Statische VariablenStatische 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 VariablenBeispiel:
![Page 36: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/36.jpg)
36
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
Statische VariablenStatische 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)
![Page 37: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/37.jpg)
37
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
//K4-P4: Statische Variable//// Demonstriert statische Variable//#include <iostream.h>void demoStatisch(); // Funktionsprototyp
int Global = 9;
main() {int i;
for(i=0; i < 3; ++i) {cout <<"\nDurchlauf i = "<< i << " :";demoStatisch();
}Global++;cout << "\nGlobal in main: "
<< Global << endl;
}
![Page 38: EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido moraga@cs.uni-dortmund.de.](https://reader033.fdocuments.net/reader033/viewer/2022061603/55204d6649795902118bb696/html5/thumbnails/38.jpg)
38
Kap 4: Vereinbarungen + GültigkeitVorl “EINI-I"
9.11.2000
void demoStatisch() {static Statisch = 9;int nurLokal = 9;
// Erinnerung: cout <<"Durchlauf i = "<< i << " :"cout << "\nGlobal in demoStatisch: "
<< Global << endl;Global++;cout << "\tStatisch in demoStatisch: "
<< Statisch << endl;Statisch++;cout << "\t\tnurLokal in demoStatisch: "
<< nurLokal << endl;nurLokal++;
}
• Ausführen