Inhaltsverzeichnis

10.0 Kontrollstrukturen

Jede Aufgabe oder jedes Problem – als Aufgabe mit erhöhtem Anforderungsniveau – deren Lösung durch Al­gorithmen beschrieben werden können, sind im Prinzip mit Hilfe des Denkwerkzeugs Computer lösbar. Damit wird der unmit­tel­bare Zusammenhang zwischen Algorithmus und Computerprogramm offensichtlich, der bereits in den Kapiteln 4.5 und 4.6 deutlich herausgehoben wurde. Für den Programmentwurf müssen die Algorithmen für die wichtigsten Prozeduren in einer geeigneten Beschreibungsform – entweder als Text oder in einer anderen geeigneten Form (Natürliche Sprache - Text, Pseudo-Code, Struktogramm oder auch Nassi-Shneiderman-Diagramm) – vorliegen, wobei die Darstellungsform (Notation) der jeweiligen Aufgabenstellung angepasst ist.

Bei der Darstellung von Algorithmen werden Sie feststellen, das jeder Algorithmus aus wenigen Strukturelementen aufgebaut ist. Man nennt diese Strukturen Kontrollstrukturen, weil man sie zur Kontrolle und Steuerung komplexer (Programm-)Abläufe verwendet. Folgende Kontrollstrukturen werden in diesem Kapitel beschrieben:

10.0.1 Auswahl – Fallunterscheidungen oder Selektion

10.0.2 Wiederholung – Schleife oder Loop

10.0.3 Spezielle Kontrollstrukturen

10.0.4 Beispiel

Im folgenden Abschnitt wird ein Ausschnitt aus dem Quelltext eines realen Projekts vorgestellt, in dem mit einigen der o.a. Kontrollstrukturen (For Each..In..Next, For..To..Step..Next, Select..Case, Rekursion, If..Then..Else..Endif) der Programmablauf in einer Prozedur kontrolliert und gesteuert wird:

Public Sub ParseNode(Node As XmlNode) 
 
  Dim xmlNode, xmlAttribute As XmlNode 
  Dim hFeed As FeedItem 
  Dim iCount As Integer 
 
  FOR EACH xmlNode IN Node.Children 
    IF xmlNode.Name = "item" THEN 
       hFeed = New FeedItem(ListContainer.Count + 1, ListContainer) 
       FOR iCount = 0 TO xmlNode.Children.Max STEP 1
         xmlAttribute = xmlNode.Children[iCount] 
         SELECT CASE xmlAttribute.Name 
           CASE "title" 
             hFeed.FeedTitle = xmlAttribute.Value 
           CASE "description" 
             hFeed.Description = xmlAttribute.Value 
           CASE "link" 
             hFeed.Link = xmlAttribute.Value 
         END SELECT ' xmlAttribute.Name 
       NEXT ' iCount 
    ELSE 
       IF xmlNode.Children.Count > 0 THEN ParseNode(xmlNode) ' Rekursiver Aufruf! 
    ENDIF ' xmlNode.Name = "item" ? 
  NEXT ' Each xmlNode 
 
End ' ParseNode(...) 

Download