Informatik I

Werbung
FAKULTÄT FÜR TECHNIK
STUDIENGÄNGE
ELEKTROTECHNIK / INFORMATIONSTECHNIK
UND TECHNISCHE INFORMATIK
Informatik I
Übung 8
Datenstrukturen
Inhaltsverzeichnis
1
2
Datenstrukturen ....................................................................................................... 3
1.1
Zugriff auf die Strukturelemente ........................................................................ 4
1.2
Strukturarrays.................................................................................................... 4
1.3
Zeiger und Strukturen........................................................................................ 4
1.4
Zugriff auf Strukturkomponenten über Zeiger .................................................... 5
Übungsaufgabe ........................................................................................................ 6
Übung 8
Seite 2 von 6
1 Datenstrukturen
Eine Struktur verbindet eine Ansammlung mehrerer Variablen unter einem Namen. Die
Handhabung dieser Verbundvariablen wird dadurch vereinfacht und übersichtlicher
gestaltet. Strukturen werden eingerichtet, um komplizierte Daten, meistens Daten
unterschiedlichen Datentyps, zu organisieren und besonders in umfangreicheren
Programmen den Zugriff auf Daten zu vereinfachen. Die größte Vereinfachung liegt darin,
dass sich die unter einem Strukturnamen abgelegten Variablentypen in den meisten Fällen
als Einheit ansprechen lassen.
Syntax
Eine Struktur wird mit dem Schlüsselwort struct und einem Strukturtitel eröffnet. Es
folgt in geschweiften Klammern die Liste aller Variablentypen und der zugehörigen
Namen.
struct Strukturname
{
Datentyp_1
Datentyp_2
Datentyp_n
Name_1;
Name_2;
Name_n;
}
Strukturvariablennamen;
Anschließend kann optional der Variablenname für die Struktur gewählt werden.
Beispiel:
struct buch
{
char sTitel[12];
char sAutor[12];
int iJahr;
};
void main(void)
{
struct buch b1,b1,b3;
.
.
.
}
Übung 8
Seite 3 von 6
1.1
Zugriff auf die Strukturelemente
Wurden Strukturvariablen einer Struktur deklariert wie,
struct buch b1,b2,b3;
so erfolgt der Zugriff auf ein Element der Struktur über die Anweisung:
b1.sTitel='C++';
Das bedeutet, dass vor dem Operator "." die gewünschte Strukturvariable und hinter dem
Operator das Element der Variablen steht. Der Ausdruck kann wie eine normale Variable
gehandhabt werden.
1.2
Strukturarrays
Hat man eine größere Anzahl von Datensätzen zu verwalten, kann man dazu ein
Strukturarray deklarieren. Wie gewohnt werden dabei die Elemente mit dem Namen der
Arrayvariablen und einem Index bezeichnet.
Syntax
struct Strukturname[Anzahl Elemente];
Beispiel:
struct buch[50];
Um auf ein bestimmtes Element des Strukturarrays zuzugreifen, muss man diese nach der
folgende syntaktischen Vorschrift bezeichnen:
arrayname[index].komponentennamen;
Will man etwa als Erscheinungsjahr des Buches, dessen Daten im 37. Element des
Strukturarrays buch gespeichert sind, das Jahr 2002 festlegen, kann dies mit
buch[36].iJahr=2002;
geschehen.
1.3
Zeiger und Strukturen
Auch die Strukturen zählen zu den Datenobjekten auf die man mit einem Zeiger verweisen
kann. Zeiger auf Strukturvariablen werden dabei nicht anders definiert als Zeiger auf
andere Variablen auch.
Syntax
struct *Variablenname;
nehmen wir das Beispiel vom struct buch dann würde ein Zeiger auf die Struktur
folgendermaßen aussehen,
struct buch *pB1;
Übung 8
Seite 4 von 6
und mit der Anweisung
pB1=&b1;
speichert man die Adresse der Strukturvariablen b1 in der Zeigervariablen.
1.4
Zugriff auf Strukturkomponenten über Zeiger
Ein Zeiger auf eine Struktur enthält die Adresse einer Strukturvariablen, so stellt
(*zeiger).strukturkomponente
die Syntax für den Zugriff über einen Zeiger dar. Die Klammern um den Ausdruck
*zeiger sind notwendig, was an der höheren Priorität des "." –Operators gegenüber
des "*"- Operators liegt.
Beispiel:
(*pB1).iJahr=2002;
Eine äquivalente, aber einfachere Alternative, die auf die Klammerung verzichtet und statt
des "."-Operator den "->"Operator verwendet.
Syntax
zeiger->strukturkomponente
deswegen sind die Ausdrücke
pB1->iJahr und (*pB1).iJahr
gleichwertig.
Übung 8
Seite 5 von 6
2 Übungsaufgabe
Für alle Aufgaben muss der Programmablauf in einem Struktogramm (Nassi-ShneidermanDiagramm) dargestellt werden.
Ein Unternehmen, das Vertreter beschäftigt, will deren Umsatz aus dem letzten Jahr
überprüfen und eine „Umsatzhitliste“ erstellen. Dazu soll eine neue Datenstruktur
„Vertreter“ mit folgenden Informationen gebildet werden:
•
•
•
•
•
•
Personalnummer
Name
Vorname
Geburtsdatum
Dauer der Betriebszugehörigkeit (in Jahren)
Umsatz im letzten Jahr
Die Vertreter des Unternehmens werden in einer Reihung des neuen Datentyps
„Vertreter“ abgespeichert.
In einem C/C++-Programm sollen die Daten von max. 20 Vertretern eingegeben und in
der Reihung abgespeichert werden. Anschließend soll die Reihung entsprechend dem
Umsatz der Vertreter sortiert werden. Als Sortieralgorithmus kann Bubblesort oder ein
anderer Sortieralgorithmus verwendet werden.
Die „Vertreter - Reihung“ soll anschließend (sortiert) ausgegeben werden. Strukturieren
Sie Ihr Programm wie beim Beispiel Bubblesort aus den vorherigen Übungen, d.h. bilden
Sie Unterprogramme für die Eingabe, das Sortieren und die Ausgabe.
Übung 8
Seite 6 von 6
Herunterladen