• Keine Ergebnisse gefunden

Eine Struktur (Datentyp struct ) ist eine statische Datenstruktur, die es ermöglicht, Daten

N/A
N/A
Protected

Academic year: 2021

Aktie "Eine Struktur (Datentyp struct ) ist eine statische Datenstruktur, die es ermöglicht, Daten "

Copied!
24
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Oder, wie hält man heterogene

Daten zusammen?

(2)

26.11.2002 Prof. Zavodnik 2

Eine Struktur (Datentyp struct ) ist eine statische Datenstruktur, die es ermöglicht, Daten

verschiedenen Typs zusammenzufassen

Jedes Datum wird in einem Feld

innerhalb der Struktur gehalten

(3)

struct

Punkte auf dem Bildschirm

Spielkarten können so definiert werden

struct Point{

int a;

int b;

}

typedef enum {Herz, Pik, Karo, Kreuz} t_Farbe;

typedef enum {Zwei, ... , Zehn, Bube, ...,As}

t_Auge;

struct Karte{

t_Farbe Farbe;

(4)

26.11.2002 Prof. Zavodnik 4

typedef struct{

char *Nachname;

char *Vorname;

int Semester;

float Notendurchschnitt;

char vorbestraft;} student;

student stud1, stud2, stud3;

(5)

Bezeichner "Karte" heißt Etikett Bezeichner "Farbe" und Auge heißen Komponenten

typedef 's erleichtern Definition von Strukturen:

typedef struct{

t_Farbe Farbe;

t_Auge Auge;} t_Karte;

(6)

26.11.2002 Prof. Zavodnik 6

struct

1. struct Karte Karte1, Karte2;

2. t_Karte Karte1, Karte2;

(7)

Zuweisung: Bitweises Kopieren

Zugriff über die Struktur selbst: ist

str_var

eine Struktur-Variable und

Feld

eine Komponente, so ist

str_var.Feld

ein Bezeichner für diese Komponente

Ist

str_zeiger

ein Zeiger von obiger

Struktur, so ist

str_Zeiger->Feld

auch

ein Bezeichner der Komponente

(8)

26.11.2002 Prof. Zavodnik 8

t_Karte Karte1, Karte2, *ZKarte1;

Karte1.Farbe = Pik;

Karte1.Auge = Fuenf;

Karte2 = Karte1;

ZKarte1 = &Karte1;

ZKarte1->Auge = Bube;

(9)

(*ZKarte1).Farbe

ist mit

ZKarte1->Farbe

äquivalent

Strukturen können verschachtelt

werden

(10)

26.11.2002 Prof. Zavodnik 10

struct Kreis{

struct Punkt Mittelpunkt;

int Radius;

};

...

struct Kreis myKreis;

myKreis.Mittelpunkt.x = 100;

...

(11)

!

++(post)

Reihenfolge

l nach r

!=

==

l nach r

>=

>

<=

<

l nach r

>>

<<

l nach r -(binär)

+(binär)

l nach r

% /

*

l nach r

*

&

-(unär) +(unär)

l nach r sizeof()

~

! --(pre)

++(pre)

l nach r --(post)

->

. []

()

Operatoren

(12)

26.11.2002 Prof. Zavodnik 12

!!

l nach r ,

r nach l

|=

r nach l

^=

&=

<<=

>>=

%=

r nach l /=

*=

-=

+=

=

r nach l

?:

l nach r

||

l nach r

&&

l nach r

|

l nach r

^

(13)

"

Nicht automatisch Zeigerübergabe Nicht automatisch Zeigerrückgabe Wo möglich, als Zeiger übergeben oder zurückgeben

Fazit: Nicht immer möglich

(14)

26.11.2002 Prof. Zavodnik 14

# $

typedef struct{

double x,y; } Komplex;

Komplex Addieren(Komplex *a, Komplex *b) {

Komplex z;

z.x = a->x + b->x;

z.y = a->y + b->y;

return z;

}

(15)

Parameter durch Zeiger übergeben Rückgabewert muss kopiert

werden

Anweisung

return &z

mit

deklariertem Rückgabetyp

Komplex *

führt zu Laufzeitfehler

Siehe Folie

(16)

26.11.2002 Prof. Zavodnik 16

#

Ziel: Reihung von gemischten int- Werten in aufsteigende

Reihenfolge sortieren

Methode: Bubble Sort: Reihung von links nach rechts verarbeiten.

An aktuelle Stelle wird das kleinste Element rechts davon geschrieben Anzahl der Schritte

) 2 (

) 1 1 (

2

1 n n O n

2

n

n + − + + + = − ≈

(17)

"

Siehe Folie Algorithmus

1. Mit dem vorletzten Element beginnend, vergleiche letzten beiden Elemente, notfalls tauschen

2. Mit dem vor vorletzten usw, bis kleinstes Element an erster Stelle

3. Wiederhole 1-2 bis zum zweiten Element

4. Wiederhole 3 bis Reihung sortiert wird

(18)

26.11.2002 Prof. Zavodnik 18

#define AnzStud ...

#define MAXLEN 2000

char stringtab[MAXLEN];

typedef struct student{

char * name;

int matnr;

float notendurchschnitt;} t_student;

char *q = stringtab;

t_student *studentenliste[AnzStud];

Teil 1: Datendeklaration

(19)

%& '

Sortierungsprogramm:

void bubble(){

int i,j,k;

float tmp;

char *temp;

for (i = 0; i < AnzStud; i++)

for (j = AnzStud - 1; j > i; j--)

if (strcmp(studentenliste[j-1]->name, studentenliste[j]->name) > 0){

temp = studentenliste[j-1]->name;

studentenliste[j-1]->name = studentenliste[j]->name;

studentenliste[j]->name = temp;

k = studentenliste[j-1]->matnr;

(20)

26.11.2002 Prof. Zavodnik 20

%& '

Das Hauptprogramm

int main(void){

int i, len;

for (i = 0; i < AnzStud; i++){

studentenliste[i] = (t_student)malloc(sizeof(t_student));

printf("\nStudent Nachname bitte eingeben:");

scanf("%s", studentenliste[i]->name = q);

q = q + strlen(q) + 1;

printf("\nUnd nun die Matrikelnummer:");

scanf("%d", &(studentenliste[i]->matnr));}

bubble();

for (i = 0; i < AnzStud; i++){

printf("%s", studentenliste[i]->name);

printf(" %d", studentenliste[i]->matnr);}

return 0;

}

(21)

Zeichenketten für Namen werden hintereinander in einer

Stringtabelle abgelegt. Man beachte die Rolle von

q

Zeiger, nicht Zeichenketten,

werden nach Bedarf ausgetauscht

(22)

26.11.2002 Prof. Zavodnik 22

( # ) %* + , + - + . '

Wird rekursiv aufgebaut

Man teile die zu sortierende

Reihung in 2 Hälften. Alle Elemente in der ersten Hälfte sind kleiner als alle Elemente in der zweiten Hälfte Annahme: Reihung Tab von

Grundtyp int ist zwischen

Indexwerten erstes und letztes

zu sortieren

(23)

, / 0 % 1 '

1. pivot = Tab[(erstes + letztes)/2];

2. l = erstes; r = letztes;

3. do

1. l = Index nächsten Elements mit Tab[l]

≥pivot

2. r = Index nächsten Elements mit Tab[r]

≤pivot

3. if (l ≤ r) tausch(Tab[l], Tab[r]);

4. until (l > r)

5. if (erstes < r) q_sort(erstes, r);

6. if (l < letztes) q_sort(l, letztes);

(24)

26.11.2002 Prof. Zavodnik 24

# &

Referenzen

ÄHNLICHE DOKUMENTE

Ich glaube aber nicht, dass die Kommunistische Partei so leichtsinnig ist, sich darauf zu verlassen, dass sie nach außen Druck ablassen kann, wenn sie die Dinge intern nicht auf

Und noch 2004 segnete Putin einen Plan ab, nach dem Gazprom und Rosneft verschmelzen sollten – wozu es aber nicht kam, weil eine Richterin in Texas – ausgerechnet.. –

Schlafräuber Doch Schlafman- gel macht nicht nur krank, anders- herum können auch Erkrankungen eine Schlafstörung auslösen, dar- unter einige, von denen Senioren häufig

Aber die Arbeit unter den Bedingungen der Pandemie ist auch eine große Chance: Wir haben neue Aufgabenfelder für die Apotheken er- schlossen?. Und es hat sich gezeigt, dass

lichkeit geregelt, dass die Apothekenleitung eine betriebsbedingte Kündigung ausspricht und gleichzeitig der gekündigten PTA eine Abfindung in Höhe eines halben

Man sollte sich regelmäßig über die Innovationen, die den Beruf betreffen, informieren und den Kontakt zum Arbeitsplatz nicht abbrechen lassen!. Wer dicht am Geschehen bleibt,

Schmerzen durch Nerven- schädigung Gesunde Nerven- zellen sind von einer schützen- den Myelinschicht ummantelt – ähnlich wie bei einem Kabel, das zum Schutz der Leitungen von

Verpflichtende Vorverfahren an der Grenze sind nicht nur für die Zulässigkeitsprüfung, sondern auch für eine Prima-facie-Prüfung problematisch, bei der geprüft wird, ob