Mittwoch, 22. Juni 2011

Juni 2011 / Sortier-Programm




Sortier-Programm

Im Modul 318 - Analysieren und objektbasiert programmieren mit Komponenten bekamen wir den Auftrag, ein Programm mit Visual Basic .NET zu programmieren, welches Texte nach Ziffern oder Wörtern alphabetisch sortieren kann.

Dazu mussten wir mindestens 2 Sortieralgorithmen programmieren und das GUI des Programms möglichst Benutzerfreundlich gestalten.
Der 1. Sortieralgorithmus war einer der folgenden:


Bubble-Sort:
Der Bubble-Sort vergleicht der Reihe nach zwei benachbarte Elemente und vertauscht diese, falls sie in der falschen Reihenfolge stehen. Dieser Vorgang wird so lange wiederholt bis alle Elemente in der richtigen Reihenfolge sind und somit nichts mehr vertauscht werden kann.
Nachteil: Er ist der Langsamste Sortieralgorithmus.


Select-Sort:

Beim Select-Sort wird ein Feld einmal komplett durchlaufen. Dabei wird durch einfache Vergleiche das Grösste (oder kleinste) Element herausgesucht und ans Ende (bzw. zum Anfang) des Feldes gesetzt.
Dieser Schritt wird nun mit dem kleineren Teilfeld(Feld ohne das letzte bzw. erste Element) wiederholt, bis alle Elemente richtig eingeordnet sind.


Insert-Sort:

Beim Insert-Sort wird zuerst 1 Element eingefügt. Anschliessend wird dieses Feld um ein weiteres Element erweitert. Dieses neue Element wird durch Vergleiche und Verschiebungs- oder Vertauschungsoperationen an die richtige Stelle im Feld platziert.
Dieser Schritt wird wiederholt, bis alle Elemente im Feld eingereiht sind.


Ich entschied mich vorerst für den Insert-Sort, da dieser etwas komplizierter war und mich daher auch etwas mehr forderte.
Zu unserem ausgewählten Algorithmus sollten wir nun ein sogenanntes Struktogramm erstellen:


Nun musste jede Person noch einen 2. Algorithmus erstellen. Und das war der

Quick-Sort:
Der Quicksort teilt das zu sortierende Feld in 2 Teilfelder. Dazu wählt er ein beliebiges Element (bei mir das in der Mitte) aus dem Feld und positioniert alle kleineren Elemente links und alle grösseren Elemente rechts davon.
Anschliessend wiederholt er diesen Vorgang mit den erstellten Teilfeldern, bis alle Elemente richtig positioniert sind.
Auch hier mussten wir wieder ein bzw. zwei Struktogramme erstellen:


Das Programmieren der Algorithmen an sich war nicht wirklich schwierig, man konnte den gesamten Code eigentlich aus den Struktogrammen lesen.
Die Funktionen die ich gebraucht habe wie Mid(), Len(), Trim() und Split() kannte ich alle bereits von früheren Programmierarbeiten.
Was ich spannender fand, war das Programmieren des GUIs, da ich neue Sachen kennen gelernt habe.


Die Abfrage des Active-Conrols:
Diese Abfrage habe ich gebraucht, um zu überprüfen ob meine Icons auf enabled gesetzt werden können oder nicht.
Würde ich das nämlich nicht überprüfen und versuchen den "markierten" Text zu kopieren oder auszuschneiden würde das Programm abstürzen.
Da ich nur mit Textboxen gearbeitet habe, überprüfe ich mit Hilfe der ActiveControl-Eigenschaft der Form, ob eine Textbox ausgewählt ist.
Aber bevor nun etwas kopieren kann muss ich auch noch überprüfen, ob überhaupt ein Text markiert ist. Im Ganzen sieht das dann so aus


If TypeOf Me.ActiveControl Is Textbox Then
If CType(Me.ActiveControl, Textbox).SelectedText <> "" Then
Kopieren
End If
End If


Das arbeiten mit dem Clipboard:
Wie bereits vorhin angesprochen hab ich die Funktionen um Text zu Kopieren, Auszuschneiden, und einzufügen programmiert.


Kopieren/Auschneiden:
Um etwas ins Clipboard zu speichern wird die Clipboard-Methode SetDataObject verwendet:


Clipboard.SetDataObject(CType(Me.ActiveControl,Textbox).SelectedText)


Beim Ausschneiden wird anschliessend über das ActiveControl noch der ausgewählte Text gelöscht.


Einfügen:
Beim Einfügen habe ich immer noch etwas mehr überprüfen müssen. Den ohne gespeicherten Text kann man auch nichts einfügen.
Dazu wird mithilfe der Clipboard-Methode GetDataObejct der gespeicherte Text abgefragt.
Die Abfrage, ob nun Text gespeichert ist oder nicht sieht so aus:


If Clipboard.GetDataObject.GetData(DataFormats.Text) <> "" Then


Das Einfügen Selbst ist sehr ähnlich wie das überprüfen:


CType(Me.ActiveControl,TextBox).SelectedText = _
Clipboard.GetDataObject.GetData(DataFormats.Text)


Die Open-/Save-FileDialogs:
Mithilfe der Dialoge kann man sehr schwierige Funktionen sehr vereinfachen.
Der OpenFileDialog wird dazu verwendet Dateien zu öffnen und der SaveFileDialog logischerweise um Dateien zu Speichern.


Bei beiden Dialogen muss man zuerst ein Objekt als solchen Dialog Initialisieren:


Dim dlgSaveFile As New SaveFileDialog()
Dim dlgOpenFile As New OpenFileDialog()


Anschliessend kann man einen Filter setzten, damit nicht alle Dateien angezeigt werden. Man kann auch über die Eigenschaft RestoreDirectory festlegen, ob sich das Programm den ausgewählten Pfad merken soll, damit es beim nächsten Aufruf denselben Pfad öffnet.
Öffnen kann man diesen Dialog mit:


If dlgSaveFile.ShowDialog() P= DialogResult.OK Then
End If


So kann direkt abgefragt werden ob auf OK geklickt wurde.

Keine Kommentare:

Kommentar veröffentlichen