140 likes | 368 Views
Algorithmen und Datenstrukturen SS 2005. Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz. Überblick. Darstellungsarten Ein und Ausgabe in Jana Übungsbesprechung Übung 2. Darstellungsarten. Prosa
E N D
Algorithmen und DatenstrukturenSS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz
Überblick • Darstellungsarten • Ein und Ausgabe in Jana • Übungsbesprechung Übung 2
Darstellungsarten Prosa Allgemein verständlich; wenig anschaulich; Gefahr von Mehrdeutigkeit, Unstrukturiertheit Ablaufdiagramm sehr anschaulich; Gefahr von Unstrukturiertheit; Aufwendig zu erstellen Struktogramm anschaulich; Aufwendig zu erstellen Algorithmenbeschreibungssprache anschaulich; flexibel in der Handhabung; präzise oder grob je nach Form; leicht in Programmiersprache übersetzbar Programmiersprache Präziseste und vollständigste Beschreibungsform Alle Variablen und Konstante müssen deklariert sein (sprachabhängig) Alle Anweisungen müssen den syntaktischen Regeln der Sprache entsprechen
Struktogramm liste[i]<>x
Algorithmenbeschreibungssprache jana (java-based abstract notation for algorithms) • int search (list l int len int x) { Anweisungenreturn i • } • sort (int[1..n]valueArrbooleanincrease) { Anweisungen}
Programmiersprache Java • int search (int[]values, int x) {boolean found = false; int i = 0; while (!found && i < values.length()) { // check if value is x if (values[i] == x) { found = true; } else { i++; } } if (!found) i = -1; • return i • }
Ein- und Ausgabe in Jana Lesen • Lesen eines einzelnen Zeichens mit read(char ch, bool eof). • 2. Ausgangsparameter gibt Auskunft, ob tatsächlich gelesen wurde (eof = end of file). Schreiben • Generische Funktion write (value) für Zeichen, Zahlen, ... char ch bool eof read(ch, eof) while (! eof) { write(ch) read(ch, eof) } Beispiel • Lesen und Schreiben aller Zeichen bis an das Ende im Eingabestrom.
Zeichen und Zahlen in Jana Ord • int ord(char ch) • Liefert den Ordinalwert (z.B. ASCII-Code) des Zeichens ch Beispiele • Umwandelneines Zeichens (Ziffer) in eine Zahl. • Umwandeln von Klein- in Großbuchstaben. int i char c c = ‘4‘ i = Ord(c) – Ord(‘0‘) char c = ‘g‘ if (‘a‘<= c <=‘z‘) { int offset = Ord(c)-Ord(‘a‘) write(Chr(Ord(‘A‘) +offset)) }
Zeichenketten und Zahlen in Jana Beispiel • Umwandeln von Zeichenketten (vorzeichenlose, ganze Zahl darstellend) in entsprechende Zahlen. • Zeichenkette "123" Zahl 123. Aufgabe • Erkennen von fehlerhaften Zeichenketten (z.B. ‚"12x4"). int convert(char[] s) { int value = 0 for(int i=0.. strlen(s)-1){ int digit = Ord(s[i]) – Ord(‘0‘) value = value*10 + digit }//for return value }
Dezimal- und Binärdarstellung Frage • Wie schaut die Binärdarstellung einer ganzen Zahl aus? Lösungsidee • Betrachte nur das letzte Bit der Zahl; letztes Bit ist 1, wenn die Zahl ungerade ist, sonst 0. • Stelle das Bit in eine Zeichenkette. • Dividiere die Zahl durch 2 und schneide dadurch das letzte Bit ab. • Wiederhole den Vorgang solange Zahl > 0.
Dezimal- und Binärdarstellung Algorithmus in Jana char[] bitString(int x) { char[] bitStr = "" while (x>=0) { if ((x%2) == 0) bitStr = "0" + bitStr else bitStr = "1" + bitStr x = x/2 // ganzzahlige Division! } return bitStr }//bitString x 100 50 25 12 6 3 1 0 x%2 0 0 1 0 0 1 1 0 bitStr 0 00 100 0100 00100 100100 1100100 01100100
Schachbrettmuster Frage • Gesucht ist ein Algorithmus, der ein schachbrettartiges Muster aus zwei verschiedenen Zeichen ausgibt. Erster Entwurf • Schleife über alle Zeilen. • Schleife über alle Spalten. • Gib Zeichen X aus. • Tausche Zeichen X mit Zeichen O aus. XOXOXOXOOXOXOXOXXOXOXOXOOXOXOXOXXOXOXOXOOXOXOXOXXOXOXOXOOXOXOXOX
Schachbrettmuster Algorithmus in Jana chessBoard(int n) { for(int row=1.. n) { for(int col=1..n) { if ( (row+col)%2 == 0){ write(‘X‘) } else { write(‘O‘) } }//for writeln() // Zeile fertig }//for }//chessBorad