Step 22 - Lösungen

Lösungsvorschlag zu Aufgabe 1

var
  myArray : Array[0..100] of Integer;
  // 0...100 war falsch. Semikolon fehlte.

  i, k, m : Integer;
begin
  ShowMessage('Starte Sortierung von 101 Integern!');
   // Hochkommas; es fängt bei 0 an daher 101 Integer!
  for i:=0 to Length(myArray)-1 do   // : fehlte; -1 fehlte - alternativ: High(myArray) !
    myArray[i]:=Random(100);
    // nur das Element [1] zu initialisieren bringt wenig
    for i:=0 to Length(myArray)-2 do     // : fehlte; alternativ: High(myArray)-1
    for k:=i+1 TO Length(myArray)-1 do     // alternativ High(myArray)
      if myArray[k]then
      // do nur bei Schleifen! if ist keine Schleife!
      begin
        m:=myArray[k];
        myArray[k]:=myArray[i];
        // anstatt: myArray[i]:=myArray[k];
        myArray[i]:=m;
        // anstatt: myArray[k]:=m;
      end;
  ShowMessage('Sortierung von 101 Integern beendet!');
  // s.o.
end;
 

Lösungsvorschlag zu Aufgabe 2

Aufgaben-Teil a

function lastPos(SubStr, S : String):Integer;
  
  function ReverseString(normStr:String);
  var
    i:Integer;
    resStr:String;
  begin
    resStr := '';
    for i := Length(normStr) downto 1 do
      resStr := resStr + normStr[i];
    result := resStr;
  end;

begin
  Result:=Length(S) - Pos(ReverseString(S));
end;
 

Aufgaben-Teil b

function getPos(SubStr, S : String; PosIndex : Integer = 1):Integer;
begin
  if PosIndex = 1 then
    result := Pos(SubStr, S)
  else
    result := getPos(SubStr, copy(S, pos(SubStr,S)+1, Length(S) ), PosIndex - 1)
              + Pos(SubStr, S);
end;
 

Lösungsvorschlag zu Aufgabe 3

Thema:
Wissensfragen:
  1. Welche Dateitypen sind bei einer Weitergabe des Programmes mindestens benötigt?
    • dpr (= Delphi Programmdatei), pas (= PAScal-Quellcode) und dfm (= Delphi Formular Model)
  2. Wie heist die Methode, welche ein dynamisches Array auf eine bestimmte positive Größe setzt?
    • SetLength(Array, Länge);
  3. Wofür stehen folgende Abkürzungen: VCL, IDE, BDS, HTML, VLC
    • Visuel Component Library
    • Integrated Development Environment
    • Borland Development Studio
    • HyperText Markup Language (hat nichts mit Delphi zu tun)
    • VideoLan Client (kostenloses Videoabspielprogramm, hat auch nichts mit Delphi zu tun)
  4. Nenne mindestens 2 Vorteile von Methoden.
    • Wiederholter Code wird zusammengefasst, also wird der Code kleiner und damit übersichtlicher.
    • Bei der Fehlerbehebung muss nur noch an einer Stelle behoben werden, also Zeitersparniss.
    • Ein nicht behandelter Vorteil: Wiederverwendbarkeit: Wenn es einmal geklappt hat, und die Methode abstrakt genug ist, dann kann sie in anderen Programmen leicht wiederverwendet werden. Beispiel ist die Sammlung im Easy Delphi Helper.
  5. Was ist besser als Exception-Handling?
    • Fehlervermeidung. Jedoch muss man den DAU miteinbeziehen.
 
Thema:
Aussagenlogik
  1. Der Dateityp Cardinal hat einen größeren positiven Wertebereich als Integer.
    • Wahr. Cardinal hat zwar auch wie Integer 32 Bit, allerdings keine negativen Zahlen.
  2. Im interface-Bereich einer Unit können keine Algorithmen implementiert werden.
    • Wahr. Hier können Proceduren Deklariert werden, die im implementation-Bereich implementiert werden.
  3. Records sind Audio-Aufnahmen welche mit Turbo-Delphi kinderleicht gemacht werden können.
    • Falsch. Mit Turbo-Delphi programmiert man Delphi-programme und Records sind zusammengesetzte Felder.
  4. Eine if-Anweisung wird solange durchlaufen bis ein Wahrheitswert falsch wird.
    • Falsch. Eine if-Anweisung wird einmal durchlaufen wenn der boolsche Ausdruck wahr ist. Die While-Schleife wird solange ausgeführt, bis der boolsche Ausdruck falsch wird.
  5. Bubble-Sort dient zum Sortieren von Kaugumies.
    • Nicht ganz Richtig. Bubble-Sort sortiert Arrays oder Listen, welche von einem bestimmten Typ sind. Wenn man einen eigenen Typ hat, den man Kaugumi nennt, dann sortiert Bubblesort auch Kaugumies ;)
 

(Lösungsvorschlag) Hinweise zu Aufgabe 4

Nun gut. Hier ist und bleibt wohl, seit 2008 ein Todo offen. Aber folgender Tipp sollte die Aufgabe schon etwas einfacher machen.

Tipp:
Sei a der zu verschlüsselnde Buchstabe als Zahl.
b der Schlüssel mit b < max_i
(b kleiner als der maximale Index von a, also dem Index des größt möglichen Buchstabens.)
x gibt die göße des Binärbereiches an, in welchem a liegt:
0 < a < 2^x.
Also:
Überlege, nun nochmal wie die Buchstaben-Tabelle aufgebaut sein muss, damit die Verschlüsselung funktioniert.
Denke dabei an das logische Prinzip, das hinter dem XOR liegt.

Zur Zusatzfrage:
Wieso benötigst du, wenn du damit fertig bist, keine zusätzliche Funktion zum entschlüsseln?
Dies liegt an der "Natur" der XOR-Logik: Es ist eine Operation, die durch Wiederholen Rückgängig gemacht wird.
Mehr hierzu findest du in Step 09 - if.
 
Vielen Dank, dass du den Grundkurs Delphi absolviert hast. Du kannst mir gerne unter der folgenden Mail schreiben, wie dir der Kurs gefallen hat.
Insbesondere für Verbesserungsvorschläge bin ich sehr dankbar und wenn ihr es erlaubt, nenne ich euch namentlich oder verlinke eure Site ;)