ich war hier: ProzProg6Felder

Version [22675]

Dies ist eine alte Version von ProzProg6Felder erstellt von RonnyGertler am 2013-03-28 17:21:14.

 

 (image: http://wdb.fh-sm.de/uploads/QualipaktLehre/BMBF_Logo_klein.jpg)

Prozedurale Programmierung - Kapitel 6 - Felder


Inhalte von Dr. E. Nadobnyh


Ein Feld (Array, Vektor) ist eine Zusammenfassung von mehreren Variablen (Feldvariablen, Elementen, Feldelementen, Komponenten, indizierten Variablen) desselben Datentyps unter einem gemeinsamen Namen.

Syntax der Definition des eindimensionalen Feldes: T a[N];

Legende:
T – Datentyp eines Feldelementes,
a - Feldname,
N - Anzahl der Variablen im Feld.

Bei der Definition wird ein zusammenhängender Speicherbereich für das ganze Feld reserviert. Die einzelnen Variablen sind in aufeinanderfolgenden Speicherplätzen abgelegt:

 (image: http://ife.erdaxo.de/uploads/ProzProg6Felder/pp39.gif)

Achtung: Begriffsverwirrung bei Feldvariable vs. Feldname.


Index und indizierte Variable


Eine Variable des Feldes heißt indizierte Variable und hat den zusammengestellten Namen a[i]. Der Name besteht aus dem Feldnamen a und einem Index i.

Ein Index ist ein ganzzahliger Ausdruck. Die Indexgrenzen sind in C/C++ nicht frei wählbar. Die untere Grenze ist 0, die obere Grenze ist N-1.

Analogie: Erdgeschoß.

Ein Zugriff auf eine indizierte Variable erfolgt durch ihren Namen a[i].

Beispiel:

int a[2], b;      // Definition  
a[1] = 3;         // schreibender Zugriff auf Variable a[1]
b = a[1];         // lesender Zugriff auf Variable a[1]



Verwendungszweck von Feldern


Die Arbeit mit einer größeren Anzahl von Variablen ist recht umständlich. Da jede Variable nur unter ihrem Namen angesprochen werden kann, ist es nicht möglich, sie alle in einer Schleife zu durchlaufen.

Diese Mängel lassen sich vermeiden, wenn die Variablen nicht einzeln, sondern gemeinsam als Feld definiert werden.

Die Felder-Verwendung ist flexibel, weil der Index ein beliebiger ganzzahliger Ausdruck sein kann, z.B.:

int a[4], i=1; a[1]=1; a[a[i]+2]=5;

⇒ Demo 1. Zweck


Besonderheiten der Feld-Syntax


1. Eine Feld-Definition hat sehr ähnliche Syntax mit einem Namen der indizierten Variable. Die Bedeutung kann nur durch den Kontext bestimmt werden.

Beispiel: Der Sprachkonstrukt a[n] kann als

a) ein Teil der Definition sein, z.B.:
const int n=4; int a[n]; oder
b) ein Variablenname sein, z.B.:
int n=1; a[n] =2;

2. Die Anzahl der Indizes wird als Dimension bezeichnet. Ein Feld mit einem Index ist eindimensional. Es gibt auch mehrdimensionale Felder.


Initialisierung


Ein Feld kann während der Definition mit Werten initialisiert werden. Eine Initialisierungsliste enthält in geschweiften Klammern mehrere durch Kommas getrennte Werte. Die Zuordnung von Werten erfolgt von links nach rechts.

Beispiel: int a[3] = {11, 22, 33};

Die Initialisierungsliste darf nicht größer sein als die Elementanzahl.

Falls die Liste kleiner als die Elementanzahl ist, werden die übrigen Feldelemente mit dem Wert 0 initialisiert.

Beispiel: int a[3] = {11, 22};

Ohne eine solche Liste werden die Elemente eines lokalen Feldes mit Zufallszahlen initialisiert.

Beispiel: int a[3];


Ein zu initialisierendes Feld kann auch ohne eine Elementanzahl definiert werden. Es enthält dann so viele Elemente, wie Ausdrücke in der Initialisierungsliste angegeben werden, z.B.:

int a[ ] = {11, 22+44, 33};

Es ist wichtig die Initialisierung von der Zuweisung zu unterscheiden:

1) Eine Initialisierung kann nur bei der Felddefinition auftreten.

2) Eine Zuweisung ändert eine schon vorhandene Variable, z.B.:

int a[3]; a[0]=11; a[1]=66; a[2]=33;


6.2. Verwendung von eindimensionalen Felder
Als Beispiele werden drei elementare Sortierverfahren behandelt:

1) Selectionsort (Sortieren durch Auswahl),
2) Insertionsort (Sortieren durch direktes Einfügen),
3) Bubblesort (Sortieren durch direktes Austauschen).


Selectionsort


Algorithmus für aufsteigendes Sortieren:
1. Teile ganzes Feld in zwei Feldteile:
  • sortierten linken Feldteil (ursprünglich ist leer),
  • unsortierten rechten Feldteil.
2. Finde das Minimum in unsortiertem Feldteil.
3. Tausche das Minimum gegen erstes Element in unsortiertem Feldteil.

 (image: http://ife.erdaxo.de/uploads/ProzProg6Felder/pp40.gif)

Es gibt auch andere Variante des Verfahrens:
a) absteigendes Sortieren,
b) mit dem sortierten rechten Feldteil.

⇒ Demo 2. Select


Insertionsort


Algorithmus für aufsteigendes Sortieren:

1. Teile ganzes Feld in zwei Feldteile:
  • sortierten linken Feldteil (ursprünglich ist leer) und
  • unsortierten rechten Feldteil.

2. Rette erstes Element des unsortierten Feldteiles „e“.

3. Schiebe nach rechts alle große Elemente (größer als „e“) den sortierten Feldteil.

4. Schreibe gerettetes Element „e“ in die Lücke zwischen zwei sortierten Feldteilen.

 (image: http://ife.erdaxo.de/uploads/ProzProg6Felder/pp41.gif)

⇒ Demo 3. Insert

















CategoryProzProg
Diese Seite wurde noch nicht kommentiert.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki