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 6 Claudio Moraga; Gisbert Dittrich FBI Unido

Ähnliche Präsentationen


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

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

2 Kap 6: StrukturenVorl EINI-I" Gliederung Kapitel 6: Strukturen Vereinbarung für Zeichen auf char Zusammengesetzte Strukturen: struct Beispiel Buchdaten (einfach) Vereinbarung Zugriff u.a. unter Verwendung von Zeigern Verwendung Beispiel Buchdaten (komplexer) Karteikarte KarteLesen Aufruf Namensraum

3 Kap 6: StrukturenVorl EINI-I" Vereinbarung für Zeichen auf char char Kette[]; // Deklaration einer Zeichenkette // unbestimmter Länge. Kette // ist gleichzeitig ein Zeiger zur // ersten Komponente des Feldes. char Kette[]= Text; // Definition einer // Zeichenkette mit dem Initialinhalt Text Kurze Schreibweise (Vereinbarung): char * Kette = Text;

4 Kap 6: StrukturenVorl EINI-I" Vereinbarung für Zeichen auf char Einige Autoren interpretieren die kurze Schreibweise wie folgt: Der Datentyp für eine Zeichenkette ist char *, der einen Zeiger auf den Beginn der Zeichenfolge beschreibt, über den auf die Zeichenkette zugegriffen wird. Bei der Ausgabe einer Zeichenkette weißt der zu cout gehörende Ausgabeoperator <<, dass char * nicht als Zeiger, sondern als mit \0 terminierter Zeichenfolge aufzufassen ist.

5 Kap 6: StrukturenVorl EINI-I" #include void main ( ) { char feldname[ ]= "Frohe Weihnachten!"; char * zeigername; zeigername = &feldname[0]; cout << "\n *zeigername = " << *zeigername << endl; cout << "\n uebernaechstes Symbol = " << *(zeigername + 2) << endl; cout << "\n zeigername = " << zeigername << endl; 1

6 Kap 6: StrukturenVorl EINI-I" // Nun nur die Abgekürtzte Definition: char * zeiger_alleine = "Guten Rutsch!"; cout << "\n *zeiger_alleine = " << *zeiger_alleine << endl; cout << "\n uebernaechstes Symbol = " << *(zeiger_alleine + 2) << endl; cout << "\n zeiger_alleine = " << zeiger_alleine << endl; cout << endl; } 2 Ausführen

7 Kap 6: StrukturenVorl EINI-I" 7 Zusammengesetzte Strukturen Möchte die Daten von Büchern verwalten (Daten eines Buchs sollen logisch zusammengefügt werden). Buch- Daten jahr (int) seiten (int) preis (float)

8 Kap 6: StrukturenVorl EINI-I" 8 Typ der Komponentenstruct Name der struct Vereinbarung durch –Angabe der einzelnen Komponenten –mit Namen und Typ: struct BuchDaten { int jahr, seiten; float preis; }; Name der Komponenten

9 Kap 6: StrukturenVorl EINI-I" 9 Anmerkungen zu struct Name der Struktur ist zugleich Typname. –damit können Variable und Konstanten deklariert werden: BuchDaten meineDaten ; Danach hat die Variable meineDaten den Typ BuchDaten Zugriff auf die Komponenten ( jahr, seiten, preis ) durch Qualifikation: meineDaten.jahr

10 Kap 6: StrukturenVorl EINI-I" 10 Anmerkungen zu struct Beispiel (Zuweisung über Komponenten) meineDaten.jahr = GanzeZahlLesen("Jahr: "); meineDaten.seiten = GanzeZahlLesen("Seiten: "); meineDaten.preis = ReelleZahlLesen("Preis: "); Andere Möglichkeit durch Zuweisung einer vollständigen struct (vom Typ BuchDaten ) meineDaten = dieseDaten Über Verwendung von Zeigern (analog)

11 Kap 6: StrukturenVorl EINI-I" 11 Zuweisung unter Verwendung von Zeigern: Z.B.: Gib die Adresse eines Elements von BuchDaten an, schreibe die eingelesenen Daten "an die entsprechende Adresse : BuchDaten meineDaten LiesBuchDaten (&meineDaten); Die Funktion LiesBuchDaten ist so definiert: Anmerkungen zu struct

12 Kap 6: StrukturenVorl EINI-I" 12 Anmerkungen struct int GanzeZahlLesen (char *); float ReelleZahlLesen (char *); void LiesBuchDaten (BuchDaten *bd) { bd->jahr = GanzeZahlLesen ("Jahr: "); bd->seiten = GanzeZahlLesen ("Seiten: "); bd->preis = ReelleZahlLesen ("Preis: "); } Zeiger auf Typ BuchDaten Zuweisung an Komponenten bd->jahr steht für (*bd).jahr Signatur benutzter Funktionen Funktion LiesBuchDaten

13 Kap 6: StrukturenVorl EINI-I" 13 Anmerkungen struct Also: –in der Funktionsdefinition wird als formaler Parameter verwendet Zeiger auf Element vom Typ BuchDaten. –im Rumpf der Definition Zugriff durch Dereferen- zieren Beispiel: Die Komponente jahr wird angesprochen als (*bd).jahr, abgekürzt als bd->jahr –Aufruf : Im Beispiel: mit konkreter Adresse &meineDaten LiesBuchDaten(&meineDaten)

14 Kap 6: StrukturenVorl EINI-I" 14 Anmerkungen struct Vereinbarung konstanter structs durch Angabe der Werte: const BuchDaten dieseDaten = {1997,234,14.70};

15 Kap 6: StrukturenVorl EINI-I" 15 Anmerkungen zu {..} Allgemein: –Wertangaben bei der Definition zur gleichzeitigen Initialisierung mehrerer Werte können in geschweiften Klammern {..} angegeben werden. Weiteres Beispiel: char s[4] = {'a', 'b', 'c', \0'}; (wirkt wie die Zeichenkette s="abc")

16 Kap 6: StrukturenVorl EINI-I" 16 Beispiel Karteikarte für ein Buch soll enthalten:

17 Kap 6: StrukturenVorl EINI-I" 17 Beispiel const int autorMax = 75, titelMax = 100, verlagMax = 128; struct karteikarte { char autor [autorMax]; char titel [titelMax]; char verlag [verlagMax]; BuchDaten dieDaten; }; Direkte Umsetzung der angegebenen Spezifi- kation für die Daten. Strukturen können selbst Strukturen enthalten

18 Kap 6: StrukturenVorl EINI-I" 18 Buchdatei void AngabeLesen (char *, char *, int); void LiesBuchDaten(Buchdaten *); void KarteLesen(int i, karteikarte * k){ cout << "Buch Nr. :" << (i + 1) << endl; AngabeLesen("Autor: ", k->autor, autorMax); AngabeLesen("Titel: ", k->titel, titelMax); AngabeLesen("Verlag : ", k->verlag, verlagMax); LiesBuchDaten (&(k->dieDaten)); }

19 Kap 6: StrukturenVorl EINI-I" 19 KarteLesen/Buchdatei Der Aufruf KarteLesen (17, &ka) liest die Karte Nr. 17 ein und speichert sie unter der Adresse &ka (wobei vereinbart ist Karteikarte ka) Programm: KKarte als struct

20 Kap 6: StrukturenVorl EINI-I" // K6-P1 KKarte als Struct // // demonstriert structs // Bei Behandlung von "Randfällen" nicht robust. // Fehlerhaft !? #include const char ZeilenEnde = '\n', Null = '\0'; const int autorMax = 75, titelMax = 100, verlagMax = 128; struct BuchDaten { int jahr, seiten; float preis; } 1

21 Kap 6: StrukturenVorl EINI-I" struct karteikarte { char autor[autorMax]; char titel[titelMax]; char verlag[verlagMax]; BuchDaten dieDaten; }; //Funktionsprototypen int GanzeZahlLesen(char *); float ReelleZahlLesen(char *); void LiesBuchDaten (BuchDaten *); void AngabeLesen(char *, char *, int); void KarteLesen(int, karteikarte *); void AutorAusgeben(karteikarte *); void TitelAusgeben(karteikarte *); const int n=2; 2

22 Kap 6: StrukturenVorl EINI-I" main() { // const int n=2; karteikarte kartei[n],*zk; int i; cout << "Eingabe der Kartei-Karten:\n"; for (int i=0;i

23 Kap 6: StrukturenVorl EINI-I" void AngabeLesen(char * prompt, char * angabe, int maxWert){ int i = 0; cout << prompt << "(Zeichenkette)\t"; for (i = 0; (angabe[i] = getchar()) != ZeilenEnde && i < maxWert; i++); if (i <= maxWert) angabe[i] = Null; } void LiesBuchDaten (BuchDaten *bd) { bd->jahr = GanzeZahlLesen ("Jahr: "); bd->seiten = GanzeZahlLesen ("Seiten: "); bd->preis = ReelleZahlLesen ("Preis: "); } void KarteLesen(int i, karteikarte * k){ cout << \nBuch Nr. :" << (i + 1) << endl; AngabeLesen("Autor: ", k->autor, autorMax); AngabeLesen("Titel: ", k->titel, titelMax); AngabeLesen("Verlag : ", k->verlag, verlagMax); LiesBuchDaten (&(k->dieDaten)); } 4

24 Kap 6: StrukturenVorl EINI-I" int GanzeZahlLesen(char * prompt) { int i; cout << prompt << "(ganze Zahl)\t"; cin >> i; return i; } float ReelleZahlLesen(char * s) { float fl; cout << s << "(reelle Zahl)\t"; cin >> fl; return fl; } 5

25 Kap 6: StrukturenVorl EINI-I" void AutorAusgeben(karteikarte * k){ cout << "Autor : " autor << '\n'; } void TitelAusgeben(karteikarte * k){ cout << "Titel : " titel << '\n'; } 6 Ausführen

26 Kap 6: StrukturenVorl EINI-I" 26 KarteLesen/Buchdatei Jedes struct hat seinen eigenen Namensraum struct eins { int x; char *t; } struct zwei { float x; int t; } unabhängig voneinander


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

Ähnliche Präsentationen


Google-Anzeigen