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

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Claudio Moraga; Gisbert Dittrich
Zusammenfassung der Vorwoche
der Universität Oldenburg
der Universität Oldenburg
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
ARRAY oder FELD oder VEKTOR
Parameterübergabe von zweidimensionalen Feldern in Funktionen.
Objekte und Arbeitsspeicher
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
Claudio Moraga; Gisbert Dittrich
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 5 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 3 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 12 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 1 Gisbert Dittrich; Claudio Moraga FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 11 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 10 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Arrays,Strings&Pointer in C/C++
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Programmieren in C Grundlagen C 2
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
 Präsentation transkript:

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

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Gliederung Kapitel 5 Zeiger –Grundbegriffe –Zeiger und Felder –Beispiel: Zeichenketten –Funktionen als Parameter –Mehrdimensionale Felder

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Variable hat: –Namen –Typ u.a. Wertebereich, aus dem Werte angenommen werden –Wert (aus dem Wertebereich oder "undefiniert") ist realisiert im Speicher durch: –Speicherplatz, der hat : Adresse Anmerkung: Nicht immer alle Angaben verfügbar !

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Variable Anmerkungen: –Adresse: Eindeutiger Identifikator des Speicherplatzes –Größe des Speicherplatzes abhängig vom Typ der Variablen. –Bildliche Darstellungen: oder auch: Wert Adresse Name Typ nicht explizit angegeben ! Wert Adresse Name -99 B 123 Beispiel: Speicherplatz

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Grundbegriffe Zeiger Neu: Adressen können jetzt Werte von Variablen sein !! (Typisiert!) Zeiger: –Vereinbarung: T *var ; –var ist Variablenname, der Adressen von Variablen vom Typ "T" annimmt. Typ int -99 B 123C var Beispiel:

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Grundbegriffe Zeiger -99 B 123C var Beispiel: Gängige alternative Darstellung: -99 B 123C var Beispiel: -99 B 123C var -99 B var -99 var -99 B 123C var Beispiel:

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Grundbegriffe Zeiger Sei var Variablenname: &var liefert die Adresse von var Sei wo Name eines Zeigers (Speicherreferenz), so liefert *wo die Variable, auf die wo zeigt. Referenzen sind typisiert: es wird angegeben, welcher Typ sich hinter einer Adresse verbirgt (z. B. Referenz auf einen Wert vom Typ int ).

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Beispiele &k ist die Adresse der ganzen Zahl k, t ist als Zeiger auf eine Variable vom Typ float deklariert, beinhaltet also eine Adresse adr einer derartigen Variablen *t = speichert damit den Wert unter dieser Adresse adr int k; float *t;

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Beispiele Deklariert seien int A=1, B=-99; Nach ZeigerA = &A hat ZeigerA also als Wert die Adresse der Variablen A : -99 B 1 A ZeigerA int *ZeigerA, *ZeigerB; D.h.: die Variablen ZeigerA und ZeigerB enthalten Adressen ganzer Zahlen. ZeigerBZeigerA

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Beispiele (Forts.) -99 B A ZeigerA Nach *ZeigerA = B enthält der Speicherplatz, dessen Adresse ZeigerA ist, den Wert von B, also: -99 B 1 A ZeigerA Situation nach: B = B * B; 9801 B -99 A ZeigerA ZeigerB ZeigerB = &B; *ZeigerA = *ZeigerB; 9801 B A ZeigerA

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Merke *ZeigerA spricht den Speicherplatz an, auf den ZeigerA zeigt: weil ZeigerA eine Referenz ist, gibt *ZeigerA den Inhalt dieser Referenz an (man spricht von Dereferenzieren: von der Referenz/Adresse zum dadurch bez. Speicherplatz übergehen) &B auf der linken Seite einer Zuweisung ist illegal: die Adressen werden von Compiler oder vom Laufzeitsystem gesetzt, aber nicht vom Benutzer

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Vertausche zwei Werte Was geschieht in Tausch ? void Tausch (int a, int b) { int temp; temp = a; a = b; b = temp; } Der Tausch bleibt lokal auf die Funktion beschränkt (wg. call by value) Beispiel

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Beispiel Was geschieht in AdrTausch ? void AdrTausch(int *p, int *q) { int temp; temp = *p; *p = *q; *q = temp; } temp nimmt den Inhalt von * p auf Der Inhalt von * q wird als Inhalt von * p gespeichert Der Inhalt von * q ist der in temp gespeicherte Wert

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Beispiel (Bildchen) 30 p -121 q undef temp temp = *p; *p = *q; Dadurch ist sog. call by reference möglich *q = temp; 30 p -121 q 30 temp -121 p q 30 temp -121 p 30 q temp

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Felder und Zeiger Sei deklariert int a[10], *pa; Dann: pa = &a[0] setzt pa als Zeiger auf das erste Element von a –x = *pa würde also a[0] nach x kopieren.

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Felder und Zeiger pa+1,..., pa+9 zeigen auf die Elemente a[1],...,a[9] –es gilt also *(pa+i) = a[i] für i = 0,..., 9 Allgemein: ist deklariert T *p;(p ist also ein Zeiger auf Elemente vom Typ T ), dann bezeichnet p+i das Element vom Typ T, das von p um i*sizeof(T) entfernt liegt.

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Felder und Zeiger pa ist eine Zeiger-Variable, a ist ein anderer Typ, also sind z. B. a=pa, a++ illegal. Bei Funktionsaufrufen werden Felder als aktuelle Parameter als Zeiger auf das jeweils erste Element interpretiert! Damit erklärt sich, daß Kopiere korrekt funktioniert.

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Felder und Zeiger void strcpy (char nach[ ], char von[ ]) { int i = 0; while ((nach[i] = von[i]) ! = '\0') i++; } Kopiert bekanntlich die Zeichenkette von in die Zeichenkette nach. Die Zeichenketten werden als Felder dargestellt.

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Felder und Zeiger void strcpy (char *s, *t) { while ((*s++ = *t++) ! = '\0' ); } *s++ dereferenziert s und schaltet die Adresse dann um sizeof (char) weiter [also zu lesen (*s)++].

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Felder und Zeiger merke: ( *s++ = *t++) ! = '\0' liefert den Wert 0, falls das Ende der Zeichenkette t erreicht ist (dann soll ja auch die while -Schleife abbrechen) die eigentliche Arbeit findet in dieser Zuweisung statt, daher ist der Anweisungsblock in der while -Schleife leer.

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Vergleich von Zeichenketten Sind a und b Zeichenketten, so soll der ganzzahlige Wert strcmp(a, b) den lexikographischen Vergleich von a und b ermöglichen. Es soll gelten: –strcmp(a, b) ist negativ, wenn a kleiner als b ist, –strcmp(a, b) ist Null, wenn a gleich b ist, –strcmp(a, b) ist positiv, wenn a größer als b ist,

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Vergleich von Zeichenketten int strcmp (char *s, char *t) { for (;*s == *t; s++, t++) if (*s == '\0') return(0); return (*s - *t); } Die Zeichenketten werden durchlaufen, solange sie identische Zeichen haben tritt dabei das Ende einer Kette auf, sind sie identisch sonst wird die Differenz berechnet

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Vergleich von Zeichenketten Version mit Feldern 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]); } Felder und Zeiger Noch n Beispiel:

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Funktionen als Parameter In C++ nicht direkt möglich. Wohl aber: Übergabe eines Zeigers auf eine Funktion Zeiger auf Funktionen Beachte: int (*f)() im Vergleich zu int *f(): int (*f)(): Zeiger auf eine Funktion ohne Argumente mit Rückgabe Wert int int *f(): Funktion ohne Argument, die einen Zeiger auf int zurückgibt

Kap 5: ZeigerVorl EINI-I"Prof. Dr. G. Dittrich Mehrdimensionale Felder In C++ sind mehrdimensionale Felder möglich (Details später). Beispiel: int matrix [3][7] –beschreibt eine Matrix mit drei Zeilen und sieben Spalten, deren Elemente vom Typ int ist, –Beachte: int matrix [3][7] beschreibt 7 Elemente vom Typ int matrix [3]. –int matrix [3, 7] ist syntaktisch nicht legal.