Grundlagen Programmierung

Inhaltsverzeichnis

1 Ausblick über alle AE-Module

Überblick über alle Module

2 Das EVA-Prinzip

Eingabe Verarbeitung Ausgabe - Prinzip
Festlegung der Ausgangsdaten Ergebnisse, die im Rahmen der Verarbeitung anfallen
2
3
1
Programmbestandteile

Datentypen:

3 Interne Speicherung von Ganzzahlen

3.1 Byte

3.1.1 positive Werte

Dezimal gleichwertig zu Binär Hexadezimal
+5D 101B 00000101 05
+28D 11100B 000111000 1C
+127D 1111111B 01111111 7F
+83D 1010011B 01010011 53
+112D 1110000B 01110000 70

3.1.2 negative Werte

Schritt Beschreibung
1. Vorzeichenlos in Binärdarstellung bringen: 1110
2. links mit 0-Bits auffüllen, bis alle 8 Bits „gefüllt“ sind: 0000 1110
3. Einser-Komplement bilden, d.h. aus 0 wird 1 und aus 1 wird 0: 1111 0001
4. um 1 addieren im Binärsystem: +1
1111 0010

3.2 2 Byte

3.2.1 Beispiel

Dezimal Binär Auffüllen links mit 0-Bits Hexadezimal
+150 10010110 0000 0000 1001 0110 0096
-130 10000010 0000 0000 1000 0010
0000 0000 1000 0010
1er K
1111 1111 0111 1101
1+
1111 1111 0111 1110
FF7E
0 2 4 6 0246 positiv, d.h. "nur" Umrechnen ins Dezimalsystem
2*162+4*161+6*160
2*256+4*16+6*1
512+64+6
+582
163 162 161 160
F F A B
binär: 1111 1111 1010 1011
1er Komplement:
0000 0000 0101 0100
1+
0000 0000 0101 0101
HEX: 0055
DEZ: -85
Oder
FFAB
1er Komplement
0054
1+
0055
163 162 161 160

4 Interne Zahlen-Darstellung im Gleitpunktformat in 4 Byte (IEEE 754 Format)

Die Darstellung einer Gleitkommazahl formal: x = s * m * b e

s Vorzeichen Wird in einem Bit gespeichert:
  • 0 = positiv(+)
  • 1 = negativ(-)
m Mantisse Grundsätzlich besteht die Mantisse aus 23 Bits. Jedoch steht ganz links noch ein 24-igstes welches immer auf 1 gesetzt ist. Diese wird nicht gespeichert
b Basis Zugrundeliegendes Zahlensystem 2
e Exponent wird als nichtnegative Binärzahl in 8 bit gespeichert. Wird auch gern als "Charakteristik" oder "biased exponent" bezeichnet.
Dieser beträgt bei:
einfacher Genauigkeit: (32 bit) = 127
doppelter Genauigkeit: (64 bit) = 1023

Beispiel: Float-Wert = +1.010
Beispiel float 1.0

4.1 Wie rechnet man das um?

4.1.1 Ins binäre Format IEEE 754

Float-Wert: 10.62510

Schritt:

  1. Vorzeichen vorerst weg lassen
  2. Vorkommabereich ins binäre Format bringen:
    Rechenweg
    D D Q R
    10 : 2 = 5 0
    5 : 2 = 2.5 1
    2 : 2 = 1 0
    1 : 2 = 0.5 1
    Vorkommabereich binär = 1010(von unten nach oben = links nach rechts)
  3. Nachkommabereich ins binäre Format bringen:
    Hier wird nicht dividiert, sondern multipliziert
    Rechenweg
    D D Q R
    0.625 * 2 = 1.25 1
    0.25 * 2 = 0.5 0
    0.5 * 2 = 1.0 1
    0.0 * 2 = 0.0 0
    weitere Nullen da 0 mal irgendwas 0 bleibt!
    Nachkommabereich binär 0.10100000....0(von oben nach unten = links nach rechts)
  4. Normalisieren: Den Gleitpunkt nach links zur ersten 1 verschieben und jeden Gleitschritt zählen
    1010.10100000....0 * 20
    1.01010100000....0 * 23

    Der Gleitpunkt heißt Gleitpunkt da dieser nach links oder rechts gleitet ;o)

  5. Exponent ins binäre Format bringen:
    Für einfache Genauigkeit den Exponent 3 mit 127 addieren und das Ergebnis ins binäre Format bringen
    3 + 127 = 130
    Rechenweg
    D D Q R
    130 : 2 = 65 0
    65 : 2 = 32.5 1
    32 : 2 = 16 0
    16 : 2 = 8 0
    8 : 2 = 4 0
    4 : 2 = 2 0
    2 : 2 = 1 0
    1 : 2 = 0.5 1
    Exponent binär = 10000010(von unten nach oben = links nach rechts)
  6. binäres Vorzeichen bestimmen:
    Da negativer Dezimalwert ist das Vorzeichen binär = 1
  7. Die Gleitkommazahl zusammensetzen:
    1 10000010 01010100000000000000000

4.1.2 Aus dem binären IEEE 754 Format nach Dezimal

Beispiel: 1 10000010 01010100000000000000000

  1. Das erste Bit von links gibt an, dass es sich um einen negativen Wert handelt
  2. Aus den nächsten acht Bits ermittelt man den tatsächlichen Exponenten
    100000102 = 13010
    130 - 127 = 3 (Dies ist der Exponent)
    • Denormalisieren der Mantisse: 01010100000000000000000
    • Grundsätzlich schreibt man die Ziffer "1" vor die Mantisse mit einem Punkt dazwischen: 1.01010100000000000000000
    • Nun verschiebt man den Punkt um so viele Stellen nach rechts wie der Exponent angibt: 1010.10100000000000000000
  3. Vorkommastellen ins Dezimale System umrechnen: 10102
    • 0 * 20 + 1 * 21 + 0 * 22 + 1 * 23
    • 0 * 1 + 1 * 2 + 0 * 4 + 1 * 8
    • 10102 = 1010
  4. Nachkommastellen ins Dezimal System umrechnen: 101000000000000000002
    Hier erfolgt das Umrechnen von links nach rechts und mit negativen Exponent
    • 1*2-1 + 0*2-2 + 1*2-3 + 0*2-4 + 0*2-5 + 0*2-6 + 0*2-10 + 0*2-11 + 0*2-12 + 0*2-13 + 0*2-14 + 0*2-15 + 0*2-16 + 0*2-17 + 0*2-18 + 0*2-19 + 0*2-20 + 0*2-21 + 0*2-22 + 0*2-23
    • 1*2-1 + 1*2-3 = 0.625
  5. Vor- und Nachkommazahlen zur vollständigen Dezimalzahl zusammensetzen: 10.625

5 Aufbau eines Programms

Datenteil:
dient der Beschreibung der Daten, die verarbeitet werden sollen
Variablen:
Datentyp Variablenname
z.B.: Ganzzahl anzahl oder Gleitpunkt preis
Konstanten:
Ganzzahlig: 47 -2589 0
Gleitpunkt: 1.2 -3.141592 1. .5
Zeichenketten: "Bitte Zahl eingeben: " "Das Ergebnis lautet: "
Zeichen: 'x'
Anweisungsteil:
dient der Beschreibung der Anweisungsstruktur/Ablauflogik in der "Verarbeitungssäule" des EVA-Prinzips
2 Kategorien von Anweisungen:
  1. "Verarbeitungs-Anweisungen" (z.B. Rechenaufträge)
  2. "Steuernde Anweisungen" (damit wird die Reihenfolge der Abarbeitung der "Verarbeitungs-Anweisungen" festgelegt)
"Verarbeitungs-Anweisungen":
  1. Wertzuweisung:
    dient dazu, einer Variablen einen Wert zuzuordnen
    Aufbau:
    Variable = zuzuordnender Wert
    zuzuordnender Wert kann sein: Konstante oder andere Variable oder "Rechenausdruck"
    z.B.:
    anzahl = 47
    summe = 0
    preis = 12.73
    ergebnis = zahl1
    preis = 47.
    ergebnis = 5 + 5
  2. Arithmetische Anweisungen ("Rechenausdrücke"):
    dienen der Erteilung von Rechenaufträgen, dabei können NUR "Zahlen" (in Variablen oder Konstanten) verwendet werden
    Aufbau:
    Operand1 Operator Operand2
    Operatoren:
    Operand Beschreibung
    + Addition "Strich-Operationen"
    - Subtraktion
    * Multiplikation "Punkt-Operationen"
    / Division
    % Restermittlung
    ** Potenzierung
    Vorrangregeln: Potenzierung vor Punkt-Operationen, dies vor Strich-Operationen durch setzen von runden Klammern kann diese Vorrangregelung beeinflusst werden
    Beispiele:
    1. erg = 2 + 3 * 4
      1. 3 * 4
      2. 12 + 2
      3. 14
    2. 2 * 3 + 4 * 5 - 6 / 8
      1. 2 * 3 = 6
      2. 4 * 5 = 20
      3. 6 + 20 = 26
      4. 6 / 8 = 0
      5. 26 - 0 = 26
    3. 2 * (3 + 4) ** 2
      1. 3 + 4 = 7
      2. 72 = 49
      3. 2 * 49 = 98
    4. a + b / c - d
      1. b / c
      2. a +
      3. - d
    5. (x+y)/(t-s)
    6. a2 + b2
      1. a**2
      2. b**2
      3. Addition
    7. c = Wurzel aus a2 + b2
      1. c = (a**2 + b**2) **0.5
    Besonderheiten: "Integer-Division":
    kommt dann zur Wirkung, wenn BEIDE Operanden einer Divisions-Operation ganzzahlig sind; dabei wird GRUNDSÄTZLICH ein abgeschnittenes GANZZAHLIGES Ergebnis gebildet!
    "Restermittlung"
    speziell: Vorzeichen eines Restes
    Beispiel:
    Zähler Nenner Quotient Rest
    17 % 5 Quotient: 3 Rest: 2
    -17 % 5 Quotient: 3 Rest: -2
    17 % -5 Quotient: 3 Rest: 2
    -17 % -5 Quotient: 3 Rest: -2
    R = Z - Q * N
    17 - 3 * 5 = 17 - 15 = 2
    -17 - (-3 * 5) = -17 + 15 = -2
    17 - (-3 * -5) = 17 - 15 = 2
    -17 - (3 * -5) = 17 + 15 = -2
Logische Ausdrücke: Ergebnis ist ein neuer Datentyp: logisch bzw.
boolean:
nur 2 unterschiedliche Werte:
true(wahr)
false(falsch)
müssen immer dann eingesetzt werden, wenn Entscheidungen zu treffen sind
Ausprägungen:
  1. einfache Vergleiche:
    Operand1 Vergleichsoperator Operand2
    Vergleichsoperatoren:
    > < >= <= == !=
    Operanden:
    Variablen, Konstanten, "Rechenausdrücke"
  2. Zusammengesetzte logische Ausdrücke:
    Aufbau:
    einfacher Ausdruck1 Verknüpfungsoperator einfacherAusdruck2
    Verknüpfungsoperatoren
    UND, ODER dabei hat UND Vorrang vor OR
  3. Logische Negation:
    besitzt nur einen Operanden
    Aufbau:
    NICHT (logischer Ausdruck)
    Wirkung:
    "kehrt" den Wahrheitswert des logischen Ausdruckes "um" (d.h. WAHR FALSCH, FALSCH WAHR)
Beispiele:
a > b a != B a * b < a + c
a > 0 ODER b > 0 UND c == d
  1. a > 0
  2. b > 0
  3. c == d
  4. ODER UND
NICHT (a > b) gleichwertig: a <= b
NICHT (a > b ODER c <) gleichwertig: a <= b UND c >= d

6 Entwickeln von Algorithmen und deren Dokumentation

6.1 Dokumentationstechnik

6.1.1 Struktogramme bzw. Nassi-Shneiderman-Diagramme

Grundaufbau
Algorithmus
Algorithmus: komplette Anweisungstruktur
mögliche Ausprägung der Anweisungstruktur:
eine Folge an Einzel-Anweisungen ("Sequenz")
Anweisung 1
Anweisung 2
Anweisung ...
Anweisung n
Mögliche Formulierungen für Einzel-Anweisungen:
Wertzuweisung mit arithmetischen Ausdrücken...
Eingabe-Anweisungen:
  • um Ausgangswerte für Berechnungen "variabel" (über Tastatur) eingeben zu können
  • Aufbau: Eingabe: Variablenname
Ausgabe-Anweisungen
  • um Berechnungsergebnisse (über Bildschirm) anzuzeigen bzw. dem Benutzern etwas mitzuteilen
  • Aufbau:
    Ausgabe: "Ausgabetext" (auch um zu einer Eingabe aufzufordern)
    oder
    Ausgabe: Variablenname (zum Anzeigen des aktuellen Inhaltes der Variablen)
    oder
    Ausgabe: arithmetischer Ausdruck (zum Anzeigen des "Ergebnisses" des arithmetischen Ausdrucks)
    oder
    "Ausgabetext", Variablenname, "Ausgabetexte", arithmetischerAusdruck ...

6.1.2 Beispiel 1

Über Tastatur soll eine ganze Zahl eingegeben werden. Auszugeben ist (insbesondere) das Quadrat der eingegebenen Zahl (z.B. 7 Quadrat ist 49)

Beispiel 1
Datenmodell
ZAHL Ganzzahl für Eingabe
ERGEBNIS Ganzzahl für Ergebnis/Quadrat

6.1.3 Beispiel 2

Über Tastatur soll eine Anzahl von Sekunden eingegeben werden (z.B. 4000)

Berechnet und abschließend ausgegeben werden soll:

(z.B. In 4000 Sekunden stecken: 1 Stunden, 6 Minuten und 40 Sekunden)

Beispiel 2
Datenmodell
SEKUNDEN Ganzzahl für Eingabe
STD Ganzzahl für enthaltenen Stunden
MIN Ganzzahl für enthaltenen Minuten
SEK Ganzzahl für enthaltenen Sekunden

6.1.4 Beispiel 2 - Vereinfachte Version

Beispiel2 einfach
zusätzliche "helfende" Variable
RESTSEK Ganzzahl für "welche Sekunden
interessieren noch?"

6.1.5 Beispiel 2 - Erweiterung

Ergänzend auch enthaltene Wochen und verbleibende Tage ermitteln und ausgeben

Beispiel 2 erweitert
Erweitertes Datenmodell
WO Ganzzahl für enthaltene ganze Wochen
TG Ganzzahl für enthaltene ganze Tage
Schreibtischtest zu Beispiel 2
SEKUNDEN 4000 58
STD 1 0
MIN 6 0
SEK 40 58

6.1.6 Beispiel 3

Über Tastatur soll ein Monatswert (ganzzahlig, Wertebereich 1-12) eingegeben werden. Ausgeben in welchen Quartal der Monat liegt. (z.B. Monat 4 liegt im Quartal 2)

Beispiel 3
Datenmodell
Z ganzahliger Wert Eingabe
A ganzahliger Wert Ausgabe

6.2 Möglichkeiten der Steuerung eines Programmablaufs

6.2.1 (a) "Sequenz" KEINE Steuerung

6.2.2 (b) "Alternative"/"Selektion"

Merkmal
Innerhalb des Algorithmus kommen wir an eine Stelle, an der eine Entscheidung getroffen werden muss, WELCHER (von mehreren, mindestens 2) Wegen weiter zu durchlaufen ist
spätestens am Ende des Algorithmus "vereinigen sich" die Wege wieder (sog. "Vorwärtsverzweigung", d.h.BEIDE Wege führen zum Ende des Algorithmus)
Typische Aussagen in Aufgabenstellungen:
Wenn/falls ... dann ... ansonsten ...
im Struktogramm
Ein Rechteck (für eine einfache Verarbeitungsanweisung) bekommt eine Struktur
..........
Bedingung
J N
beliebige
Anweisungstruktur

wird abgearbeitet,
falls Bed. wahr
beliebige
Anweisungstruktur

wird abgearbeitet,
falls Bed. falsch

6.2.3 Beispiel 1

Über Tastatur sollen 2 ganze Zahlen (z.B. a und b) eingegeben werden.

Falls die 1. eingegebene Zahl (z.B. a) nicht kleiner als die 2. ist, soll von der 1. Zahl die 2. abgezogen und das Ergebnis ausgegeben werden, ansonsten soll von der 2. Zahl die 1. abgezogen und auch das Ergebnis ausgegeben werden.

Selektion Beispiel 1 Selektion Beispiel 1 erweitert
Datenmodell
a Ganzzahlen für Eingabe
b Ganzzahlen für Ausgabe
Schreibtischtest
a b erg
2 2 0
7 3 4
3 7 4
-5 8 13
8 -5 13
-2 -7 5
-7 -2 5

6.2.4 Beispiel 2

Über Tastatur soll eine ganze Zahl eingegeben werden. Anschließend soll ausgegeben werden, ob es sich um eine gerade oder ungerade Zahl handelt. (z.B. 5 ist eine ungerade Zahl, 10 ist eine gerade Zahl, -17 ist eine ungerade Zahl, -2 ist eine gerade Zahl)

Selektion Beispiel 2
Datenmodell
a Ganzzahl für Eingabe

6.2.5 Beispiel 3

Für eine einzugebende ganze Zahl soll (alternativ) ausgegeben werden:
Entweder die Zahl ist positiv
Oder: Es wurde eine negative Zahl eingegeben
Oder: Eingegeben wurde 0

Selektion Beispiel 3
Datenmodell
a Ganzzahl für Eingabe

6.2.6 Gleichwertige Teile von Algorithmen

  1. gleichwertig 1 kurz
    gleichw.
    gleichwertig 1 lang
  2. gleichwertig 2 kurz
    gleichw.
    gleichwertig 2 lang
  3. gleichwertig 3 kurz
    gleichw.
    gleichwertig 3 lang

4. Für ein einzugebendes Jahr (Annahme: 1000 ... 2500) soll präzise untersucht und ausgegeben werden, ob es sich bei diesem Jahr um ein Schaltjahr handelt oder nicht.

6.2.7 Beispiel

Schaltjahr var1
Datenmodell
a Ganzzahl Eingabe
Schreibtischtest Variante 1
Jahr Ergebnis Anzahl
Resterm./Bed.
2016 Schaltjahr II
2017 k. Schaltjahr II
2000 Schaltjahr II
2100 k. Schaltjahr II
Schaltjahr var2
Schreibtischtest Variante 2
Jahr Ergebnis Anzahl
Resterm./Bed.
2016 Schaltjahr III
2017 k. Schaltjahr II
2000 Schaltjahr I
2100 k. Schaltjahr III
Schaltjahr var3
Schreibtischtest Variante 3
Jahr Ergebnis Anzahl
Resterm./Bed.
2016 Schaltjahr II
2017 k. Schaltjahr I
2000 Schaltjahr III
2100 k. Schaltjahr III

6.2.8 (c) "Wiederholungen"/"Schleifen"/"Iterationen"

Merkmale:
Es soll die Möglichkeit geboten werden, Teile eines Algorithmus nicht nur einmal sondern öfter abarbeiten zu lassen.
Dies Möglichkeit kann ein mal oder zwei mal oder ... n-mal oder überhaupt nicht wahrgenommen werden!
über zu formlierende Bedingungen wird die tatschliche Anzahl der Wiederholungen gesteuert!
da im Ablauf an eine Stelle (zu einer Anweisung) zurückgekehrt werden muss, die bereits (mindestens) ein mal abgearbeitet worden ist, spricht man hier auch von sogenannten "Rückwärtsverzweigungen"
Typische Formulierungen in Aufgabestellungen:
mache etwas solange ... bzw bis ...
Unterschiedliche Ausprägungen von Schleifen (abhängig vom Zeitpunkt der Entscheidungen)
  1. "Kopfgesteuerte" Schleife ("0-Schleife")
    kopfgesteuerte Schleife
    • Bedingung muss als sogenannte "Laufbedingung" formuliert werden
    • d.h. "solange die Bedingung wahr ist, soll die beliebig komplexe Anweisungsstruktur abgearbeitet werden"
    • die "beliebig komplexe Anweisungsstruktur" bezeichnet man auch als "Schleifenkörper"
  2. "Fußgesteuerte Schleife" ("1-Schleife")
    fussgesteuerte Schleife
    • der Schleifenkörper wird mindestens 1 mal abgearbeitet
    • Bedingung muss als "Abbruchbedingung" formuliert werden,
    • d.h. "Wiederhole die Abarbeitung des Schleifenkörpers, bis die Bedingung wahr ist"
  3. "Abbruch-Schleifen"
    Abbruch Schleife
    • Schleifenkörper-Teil1 wird auf jedem Fall abgearbeitet!
    • anschließend wird die Abbruchbedingung geprüft
    • falls wahr: Beendigung der Abarbeitung des Schleifenkörpers
    • ansonsten: Abarbeiten Schleifenkörper-Teil2 UND Schleifenkörper-Teil1 nochmals

6.2.9 Beispiel 1

Im Rahmen der "Schaltjahresprüfung" soll sichergestellt werden, dass die einzugebende Jahreszahl auch wirklich im Bereich 1600 bis 2500 liegt; falls dies (zunächst) nicht so sein sollte: Fehlermeldung und erneute Eingabe ...

Kopfschleife Beispiel 1
Datenmodell
jahr Ganzzahl
Abbruch Bedingung Beispiel 1 fussgesteuerte Schleife

6.2.10 Beispiel 2

Eine Anwendung soll (untereinander) die 2-er Potenzen von 20 ... 231 ausgeben,

z.b.
2 hoch 0 ist 1
2 hoch 1 ist 2
2 hoch 2 ist 4
Schleifen Beispiel 2
Datenmodell
a Ganzzahl für Verwaltung des Exponenten (hoch...)
b Ganzzahl für Ausgabe der Potenz

6.2.11 Beispiel 3

Für 20 einzugebende ganze Zahlen soll der Durchschnittswert (auch ganzzahlig) berechnet und ausgegeben werden.

Schleifen Beispiel 3
Datenmodell
a Ganzzahl Eingabe
b Ganzzahl Summe
c Ganzzahl Steuerung

Für ganzzahligen Durchschnitt: (b+10/20)

6.2.12 Beispiel 4

Die positiven geraden ganzen Zahlen sollen bis inklusive einer einzugebenden Obergrenze aufaddiert werden. Am Ende soll die ermittelte Summe ausgegeben werden.
Beispiel: Eingegeben: 10 2+4+6+8+10

Schleifen Beispiel 4
Datenmodell
OG Ganzzahl für einzugebende
Obergrenze
SUM Ganzzahl für zu
ermittelnde Summe
Z Ganzzahl für aufzusummierende
pos. gerade Zahlen

6.2.13 Beispiel 5

In einer Anwendung sollen "beliebig" viele ganze Zahlen eingegeben werden können; Ende der Wiederholung durch Eingabe einer 0
Abschließend soll ausgegeben werden, wieviele Positive und wieviele negative Eingaben gemacht wurden.

Schleifen Beispiel 5
Datenmodell
zahl Ganzzahl für Eingabe
neg Ganzzahl für Anzahl neg. Eingaben
pos Ganzzahl für Anzahl pos. Eingaben

7 Arbeiten mit Arrays

7.1 Merkmale

7.1.1 Bisher

für jede Speicherung von Werten standen "nur" EINFACHE Variablen zur Verfügung

SUM Ganzzahl im Arbeitsspeicher "Anfasser" des Speicherplatzes oder "Symbolische Adresse"
Z Ganzzahl

EINFACHE Variablen können ( zu einem bestimmten Zeitpunkt) immer nur ein Wert aufbewahren!

7.1.2 Neu

es soll möglich werden, MEHRERE Werte "gleichzeitig" zu halten!
umsetzbar über Arrays

ein Array ist eine lückenlose Aneinanderreihung einfacher Variablen ("Elementen"), die alle GLEICHARTIG sein müssen

GLEICHARTIG heißt:

Wegen der identischen Bezeichner MÜSSEN die einzelnen Elemente ERWEITERT angesprochen werden!!!

Bezeichner[Ganzzahl] (Ganzzahl ein sogenannter "Index")

7.1.3 Beispiel 1

20-elementiges Array von Ganzzahlen

im Arbeitsspeicher: .....
Werte[0] Werte[1] Werte[2] Werte[3] Werte[18] Werte[19]

Erlaubter Wertebereich für Index: 0 ... Anzahl der Elemente - 1

Als Index darf angegeben werden:

7.1.4 Beispiel 2

Ein 30-elementiges Ganzzahl Array soll mit den ersten 30 zweier-Potenzen belegt werden:

1. Element: 1 20
2. Element: 2 21
3. Element: 4 22
... ... ...
30. Element: ? 229
Array Beispiel 1
Datenmodell
P2ARR 30-elementiges Ganzzahl-Array
I Ganzzahl als Index

7.1.5 Beispiel 3

In einem 12-elementigen Gleitpunkt-Array MUMSARR sollen (zunächst) die Umsätze je Monat (eines Jahres) gespeichert werden.

Array Beispiel 2
Datenmodell
MUMSARR 12-elementiges Array
von Gleitpunktzahlen
für Monatsumsätze
MI Ganzzahl für Monats-Index

7.1.6 Beispiel 3 - 1. Ergänzung

Gegeben und bereits gefüllt ist das Array aus Beispiel 2...

Zu berechnen und auszugeben ist die Jahresumsatzsumme sowie der durchschnittliche Monatsumsatz.

Array Beispiel 2 Ergänzung
Datenmodell: Ergänzung 1
MUMSARR 12-elementiges
Array von
Gleitpunktzahlen
für Monatsumsätze
MI Ganzzahl für Monats-Index
JSUM Gleitpunkt für Jahresumsatz

7.1.7 Beispiel 3 - 2. Ergänzung

Gegeben und bereits gefüllt ist das Array aus Beispiel 2...

Welches ist der höchste und welches der niedrigste erzielte Monatsumsatz?

Datenmodell: Ergänzung 1
MUMSARR 12-elementiges
Array von
Gleitpunktzahlen
für Monatsumsätze
MI Ganzzahl für Monats-Index
MUMSMIN Gleitpunkt für niedr. Monatsumsatz
MUMSMAX Gleitpunkt für höchst. Monatsumsatz
Array Beispiel 2 Ergänzung

7.1.8 Beispiel 3 - 3. Ergänzung

Gegeben und bereits gefüllt ist das Array aus Beispiel 2...

Nur zu berechnen sind die 4 Quartalsumsatzsummen aber auch zu speichern

Array Beispiel 2 Ergänzung
Datenmodell: Ergänzung 3
MUMSARR 12-elementiges
Array von
Gleitpunktzahlen
für Monatsumsätze
MI Ganzzahl für Monats-Index
QSUMARR 4-elementiges
Array von
Gleitpunktzahlen
für Monatsumsätze
QI Ganzzahl für Quartals-Index

7.1.9 Beispiel 4

Ein 10000-elementiges Ganzzahl-Array (ARR) soll in seinen Elementen abwechselnd mit 0 und 1 belegt werden. d.h. ARR[0]:1, ARR[1]:0, ARR[2]:0, ...

Arrays Beispiel 3 Null und Eins
Datenmodell: Beispiel 3
ARR 10000-elementiges Ganzzahl-Array
ARRI Ganzzahl

7.2 Sortieren von Arrays

7.2.1 Ziel

die Array Elemente sollen (bezüglich ihrer Inhalte) in einer (z.B. aufsteigenden) Reihenfolge vorliegen

7.2.2 1. Möglichkeit: "Methode des kleinsten Elements"

z.B. für ein 5-elementiges Ganzzahlen-Array

[0] [1] [2] [3] [4]
14 1 23 0 18
1 14 23 0 18
1 14 23 0 18
0 14 23 1 18
0 14 23 1 18
0 14 23 1 18
0 1 23 14 18
0 1 23 14 18
0 1 14 23 18
0 1 14 23 18
0 1 14 18 23
Arrays sortieren 1. Möglichkeit
Datenmodell
ARR Array mit Elementen
eines beliebigen Datentyps
mit N Elementen
RI Ganzzahl als "linker" Index
LI Ganzzahl als "rechter" Index
H beliebiger Datentyp
als Hilfsfeld für Tauschen

Um absteigend zu sortieren muss nur der Vergleichsoperator in der Bedingung umgekehrt werden!

7.2.3 2. Möglichkeit: "Bubble-Sort"

[0] [1] [2] [3] [4]
14 1 23 0 18
1 14 23 0 18
1 14 23 0 18
1 14 0 23 18
1 14 0 18 23
1 14 0 18 23
1 0 14 18 23
1 0 14 18 23
0 1 14 18 23
0 1 14 18 23
0 1 14 18 23
Arrays sortieren 2. Möglichkeit
Datenmodell Bubble Sort
ARR
H
I Ganzzahl als Index
OG Ganzzahl für Verwaltung
der Obergrenze
der Vergleiche

7.2.4 Idee zur Optimierung des "Bubble-Sorts"

Falls bei einem KOMPLETTEN Durchlauf der inneren Schleife KEIN EINZIGES MAL getauscht werden musste, kann der ganze Algorithmus VORZEITIG abgebrochen werden!

Arrays sortieren 2. Möglichkeit optimiert
Datenmodell Bubble Sort
ARR
H
I Ganzzahl als Index
OG Ganzzahl für Verwaltung
der Obergrenze
der Vergleiche
NGT Ganzzahl für Verwalten "nicht getauscht"
  • 0 falls nicht getauscht
  • 1 falls getauscht

7.3 Suchen in Arrays

7.3.1 Beispiel-Szenario

Gegeben und auch gefüllt ist ein 10000-elementiges Array mit (unterschiedlichen) ganzzahligen Artikelnummern

Ziel:
  • In diesem Array nach einer Artikelnummer suchen;
  • falls gefunden: Ausgeben, an welcher Position (Index) der gesuchte Wert steht
  • ansonsten: Ausgeben, dass der gesuchte Wert nicht gefunden wurde

7.3.2 1. Möglichkeit: Durchsuchen eines UNSORTIERTEN Arrays ("Serielles Suchen")

Array suchen
Datenmodell
AARR zu durchsuchendes
Array
E Ganzzahl für einzugebende
zu suchen Artikelnummer
I Ganzzahl Index
Array durchsuchen Möglichkeit 1

7.3.3 2. Möglichkeit: Durchsuchen eines (aufsteigend) sortierten Arrays ("Sequentielles Suchen")

Array durchsuchen Möglichkeit 2
Datenmodell
AARR zu durchsuchendes
Array
E Ganzzahl für einzugebende
zu suchen Artikelnummer
I Ganzzahl Index

7.3.4 3. Möglichkeit: Durchsuchen eines (aufsteigend) SORTIERTEN Arrays ("Binäres Suchen")

2516 2718 3215 3333 4092 4101 4216 4711 5001 6123
Binäres Suchen
Datenmodell
AARR
E Ganzzahl
MI Ganzzahl als "mittlerer" Index
UG Ganzzahl für Verwaltung der "Untergrenze"
OG Ganzzahl für Verwaltung der "Obergrenze"
einmalig vorbereitende Tätigkeiten:
UG = 0
OG = 9999
wiederholt vorbereitende Tätigkeiten:
MI = (UG + OG) / 2
Falls E == ARR[MI] ist ABBRUCH
Falls E > ARR[MI]
dann: UG = MI + 1
sonst: OG = MI - 1
Falls UG > OG ist ABBRUCH

7.4 Mehrdimensionale Arrays

7.4.1 Merkmal

Bisher:
Alle Arrays waren 1-Dimensional
die Elemente in diesen Arrays waren von einem einfachen Datentyp (Ganzzahlen oder Gleitpunkt)
Jetzt:
2-Dimensionale Arrays
die Elemente eines solchen Arrays sind NICHT von einem einfachen Datentyp, sondern selbst wieder um 1-dimensionale Arrays (ein 2-dimensionales Array IST ein 1-dimensionales, dessen Elemente wieder 1-dimensionale Arrays sind)

7.4.2 bildliche Vorstellung

1-dimensionales Array:

x

"nur" Spalten, nur 1 Indexangabe(für die Spalte)

für 2-dimensionales Array:

X

Zeilen UND Spalten, 2 Indexangaben ( zunächst für die Zeile UND auch noch für die Spalte)
[2]Zeilenindex [3] Spaltenindex

7.4.3 Beispiel

Gegeben und bereits gefüllt sei ein 2-dim. Array mit 50 Zeilen zu jeweils 12 Spalten.
Hier sind zu 50 Filialen die 12 Monatsumsätze als Gleitpunktzahlen gespeichert.

  1. Für alle 50 Filialen soll jeweils der Jahresumsatz berechnet und sofort ausgegeben werden
    Array 2D Jahressumme
    Datenmodell
    MUMSARR2D
    ZI Ganzzahl als Zeilen-Index
    SI Ganzzahl als Spalten-Index
    JSUM Gleitpunktzahl für den Jahresumsatz
  2. Für die 12 Monate soll nur berechnet und gespeichert, (aber nicht ausgegeben) werden wieviel Umsatz alle Filialen im jeweiligen Monat erzielt haben
    Array 2D Beispiel 1 Aufgabe B
    Datenmodell
    MUMSARR2D
    ZI Ganzzahl als Zeilen-Index
    SI Ganzzahl als Spalten-Index
    MSUMARR Gleitpunkt 12 elementiges
    Gleitpunkt-Array
  3. Es soll der Gesamtumsatz ALLER Filialen in ALLEN Monaten berechnet und ausgegeben werden
    Array 2D Beispiel 1 Aufgabe C
    Datenmodell
    MUMSARR2D
    ZI Ganzzahl als Zeilen-Index
    SI Ganzzahl als Spalten-Index
    GSUM Gleitpunkt Gesamtsumme