Testataufgaben


Einführung Informatik/Algorithmen und Datenstrukturen

Prof. Dr. Reiner Dumke

WS 2000/2001

Sören Balko, Ilona Blümel, Dr. Martina Engelke, Markus Feldbach, Niels Grabe, Dr. Reinhard Köppe, Uwe Scholz, Nadine Schulz, Dr. Fritz Zbrog

TESTATAUFGABEN

Ausgabe: ab 29.01.01

Bearbeitung: in Gruppen von zwei Studierenden (können aus verschiedenen Studienrichtungen sein)

Konsultationsmöglichkeiten: Nach Vereinbarung (per e-mail) beim Übungsleiter

Die Lösung ist als JAVA-Applet abzuliefern und im SUN-Pool verfügbar zu machen (Quelltext und html-Seite). Die URL-Adresse ist bis zum 12.04.01 dem Übungsleiter per e-mail zu schicken.

Die Abnahme des lauffähigen JAVA-Programms erfolgt im April im SUN-Pool. Es wird im Rahmen eines Testates geprüft, inwieweit das vorgeführte Programm läuft und verstanden ist (Programm muß gut erklärt und leichte Modifikationen müssen vorgenommen werden können).


Von den folgenden Aufgaben ist eine zur Bearbeitung auszuwählen!


  1. Laufschrift auf Funktionskurve

  2. Es ist eine parametrisierbare Laufschrift in einem JAVA-Applet in geeigneter Art und Weise darzustellen. Durch eine Texteingabe ist der Schriftzug zu erfassen.

    Verschiedene Textattribute wie Schriftart, Farbe und Größe müssen eingegeben werden können (aus Liste auswählen lassen). Weiterhin soll die Bahn, auf der sich der Schriftzug bewegen soll, durch eine Reihe von Funktionen vorgegeben sein. Umzusetzen sind:

    y = x*x

    y = m*x +n

    y = sin x

    y = cos x

    Abschließend sollen die Geschwindigkeit und die Bewegungsrichtung eingestellt werden können.


  3. Funktionen zeichnen

  4. Zeichnen Sie in einem Intervall Ihrer Wahl den Graphen der Funktion fuer den folgenden Ausdruck:

    ausdruck : operand operator operand

    operand : sin | cos | ZAHL

    operator : '+' | '-' | '*' | '/'

    sin und cos bezeichnen die gleichnamigen Winkelfunktionen und ZAHL eine numerische Konstante.

    Probleme, wie z.B. die Division durch 0, sind zu erkennen und zu behandeln.

    Der Ausdruck ist als String einzulesen, zu interpretieren und der resultierende Graph in einem adäquaten Koordinatensystem darzustellen.

    Bsp.: sin + cos bedeutet sin(x) + cos(x)

          sin + 4 bedeutet sin(x) + 4


  5. Einfaches Malprogramm

  6. Entwickeln Sie ein einfaches Malprogramm mit dem Kreise, Rechtecke, gleichseitige Dreiecke Freihand gezeichnet werden kann. Zum Zeichnen eines Kreises ist die Angabe des Radius vom Nutzer festzulegen. Ebenso muss der Nutzer die Seitenlängen der Rechtecke und der Dreiecke bestimmen koennen. Das Programm soll ferner die Möglichkeit bieten, zwischen verschiedenen Zeichenfarben zu wählen.


  7. Schach

  8. In einem Java-Applet sollen ein Schachbrett und 32 Schachfiguren visuell dargestellt werden. Über eine grafische Nutzerschnittstelle sollen abwechselnd eine weisse/schwarze Figur bewegt werden. Dabei soll programmseitig überprüft werden, ob der entsprechende Zug für die gewählte Figur zulässig ist. Die Zugmöglichkeit wird durch folgende Faktoren bestimmt:

    a) Zugregel der Figur (z.B. Läufer nur auf Diagonalen)

    b) Kollision mit anderen Figuren (ausser beim Springer)

    Wenn der Zug möglich ist, und im Zielfeld eine gegnerische Figur ist, wird diese geschlagen, d.h. vom Schachbrett entfernt.

    Als freiwillige Zusatzaufgabe (Anregung) können auch kompliziertere Elemente wie Schach-/Matterkennung, Rochade, Bauernumwandlung usw. implementiert werden.


  9. Trapezregel

  10. Mit Hilfe der Trapezregel soll die Fläche unter einem Graphen in einem festgelegten Intervall (das bestimmte Integral) numerisch angenähert werden. Dabei werden unter dem Graphen n Trapeze der gleichen Breite h platziert. Für die Integrationsgrenzen (a,b) ergibt sich für n Intervalle für h der Wert h = (b-a)/n (Eine detaillierte Beschreibung der Trapezregel findet sich beispielsweise unter Regeln).

    Schreiben Sie ein Java-Applet, in dem die Funktion f: y=sin(x) visuell in einem Koordinatensystem dargestellt wird. Das bestimmte Integral in den Grenzen (0,PI) soll berechnet werden. Dazu soll der Nutzer eine beliebige ganzzahlige Intervallanzahl n eingeben, aus der mit Hilfe der Trapezregel das bestimmte Integral berechnet wird.

    Als freiwillige Zusatzaufgabe kann die Anwendung der Trapezregel, d.h. die Platzierung von Trapezen unter dem Graphen ausserdem visuell dargestellt werden.


  11. Spiel "vier gewinnt"

  12. 2 Spieler treten gegeneinander an und werfen jeweils abwechselnd einen Stein ihrer Spielfarbe (rot und blau) in eine Reihe von s nebeneinanderstehender Säulen, in die jeweils h aufeinanderliegende Spielsteine passen. Die Spielsteinen fallen bis auf den Boden der Säule oder den letzten in diese Säule eingeworfenen Spielstein. Gelingt es einem Spieler in vier nebeneinanderliegenden Säulen vier Spielsteine seiner Farbe auf einer Höhe oder als Diagonale zu positionieren, so hat er gewonnen.

    Das Spiel soll als Java-Applet implementiert werden, wobei die Säulen mit ihren Spielsteinen als s * h Matrix dargestellt werden. Die Parameter s und h können vor Spielbeginn frei im Bereich 6 bis 12 gewählt werden. Nach jedem Wurf eines Spielsteines eines Spielers muß das Programm überprüfen, ob ein Spieler gewonnen hat und eine entsprechende Meldung ausgeben. Die Menge der Spielsteine ist unbegrenzt.

    Schematische Beispielausgabe mit B als Blau und R als Rot. Blau hat soeben gewonnen.

               
               
     

    B

     

    R

       

    B

    R

    B

    R

       

    R

    R

    R

    B

    B

    R

    B

    R

    B

    R

    B

    R


  13. Sortierverfahren

  14. Visualisieren Sie die Arbeitsweise der Sortierverfahren

    indem Sie nach jedem Austausch den Inhalt des zu sortierenden Feldes in geeigneter Weise anzeigen, z. B. als Punktmenge (x-Koordinate entspricht dem Index, y-Koordinate dem Inhalt).

    Es soll in einem Menü möglich sein, das entsprechende Verfahren, die zu sortierenden Testdaten (zufällig, sortiert, absteigend sortiert) und die Anzahl der Elemente (nicht mehr als 500) auszuwählen. Die zu sortierenden Elemente seien vom Typ int.

    meine Lösung


  15. Konvertierung von arabischen in römische Zahlen

  16. Entwickeln Sie ein Programm, das eine arabische Zahl in eine römische und umgekehrt konvertiert. D.h. ein Benutzer kann:

    Es wird freigestellt, ob die Eingabe einer falschen römischen Zahl (z.B. IIII) abgelehnt oder ausgewertet wird.

    Zusätzlich soll die römische Zahl vergrößert dargestellt werden. Dazu können beispielsweise die bekannten Methoden zum Zeichnen von Linien o.ä. genutzt werden.

    Es gelten folgende Entsprechungen:

    arabisch:

    1

    5

    10

    50

    100

    500

    1000

    römisch:

    I

    V

    X

    L

    C

    D

    M

    Die Regeln der römischen Zahlen:

    1.

    Grundsätzlich sind die Ziffern in absteigender Reihenfolge von links nach rechts angeordnet, wobei sich der Wert der Zahl aus der Summe der Ziffern ergibt. Ausnahme hierbei ist Regel Nr. 3. (Bsp.: XVIII = 18)

    2.

    Die Ziffern I, X und C dürfen höchstens dreimal hintereinander stehen
    (also nicht 4 IIII oder 90 LXXXX)

    3.

    Damit Zahlen wie 4 oder 90 dennoch möglich sind, wird eine kleinere Ziffer vor eine größere gestellt, was besagt, daß die kleinere von der größeren subtrahiert wird.
    (Bsp: IV 5-1=4, XC 100-10=90)

    4.

    Es darf maximal eine kleinere Ziffer vor einer größeren stehen
    (z.B. 8: IIX falsch, VIII richtig)

    5.

    Die Ziffern V, L und D dürfen in einer Zahl nur einmal und nicht vor einer größeren Ziffer stehen (z.B. 95: VC falsch, XCV richtig)

    Beispiel: 947 = (1000-100)+(50-10)+(5+1+1) CMXLVII

    meine Lösung


  17. Vigenère-Chiffre

  18. Ein einfaches Verschlüsselungsverfahren ist unter dem Namen Caesar-Chiffre bekannt. Julius Cäsar schrieb auf seinen Feldzügen vertrauliche Nachrichten in folgender Geheimschrift: er ersetzte jeden Buchstaben des Textes durch den, der im Alphabet genau drei Positionen weiter stand.

    Beispiel:

    Klartext: veni, vidi, vici (ich kam, sah und siegte) Chiffretext: yhql, ylgl, ylfl.

    Die Verschiebechiffre verwendet als geheimen Schlüssel eine natürliche Zahl n (n < 26), diese gibt an, um wieviel Stellen das Alphabet (nach links) verschoben wird. Im Fall der Caesar-Chiffre ist n = 3.

    Ein mehrfaches Anwenden dieser Substitutionen mit jeweils anderen Verschiebungen führt zur Vigenère-Chiffre. Der französischen Diplomaten Blaise de Vignère (1523 bis 1596) veröffentlichte 1586 seine Idee. Dieses Verfahren wird nur auf Buchstabenfolgen angewandt. Die Chiffrierung erfolgt nach folgendem Schema:

    1. Entferne aus der zu chiffrierenden Nachricht alle Zeichen, die keine Buchstaben sind und wandle alle Buchstaben in Kleinbuchstaben um. Das Ergebnis ist der Klartext.

    2. Wähle ein beliebiges Schlüsselwort, z. B. "VENUS".

    3. Schreibe dieses Schlüsselwort zyklisch (ohne Zwischenräume) über den gesamten Klartext.

    4. Den Geheimtext erhält man aus der Addition der übereinander stehenden Buchstaben. Dazu wird jeder Buchstabe in eine Zahl transformiert: a 0, b 1, ..., z 25, beide Zahlen modulo 26 addiert und das Ergebnis in den zugehörenden Buchstaben transformiert.

    Beispiel:

    Schlüssel

    Klartext

    V E N U S V E N U S V E N U S V E N U S V E N U S V E

    d a s i s t e i n s t r e n g g e h e i m e r t e x t

    Geheimtext

    Y E F C K O I V H K O V R H Y B I U Y A H I E N W S X

    Der Vorteil dieses Chiffrierverfahrens ist, dass gleiche Klartextbuchstaben in verschiedene Geheimtextbuchstaben transformiert werden und damit die Häufigkeit der einzelnen Buchstaben gleichmäßiger verteilt ist als bei monoalphabetischen Chiffrierungen.

    Zum Dechiffrieren wird das Schlüsselwort zyklisch unter den Geheimtext geschrieben und beide Zahlenwerte modular subtrahiert.

    Geheimtext

    Schlüssel

    Y E F C K O I V H K O V R H Y B I U Y A H I E N W S X

    V E N U S V E N U S V E N U S V E N U S V E N U S V E

    Klartext

    d a s i s t e i n s t r e n g g e h e i m e r t e x t

    Y - V 25 - 21 = 4 d, und F - N 5 - 13 = -8 = 26 - 8 = 18 s

    Aufgabe:

    Schreiben Sie eine Klasse Caesar, die einen Klartext mittels einer Verschiebechiffre chiffriert und einen Geheimtext dechiffriert. Der geheime Schlüssel soll im Konstruktor übergeben werden. Eine weitere Klasse Vigenere soll die Vigenère-Chiffre realisieren, auch hier ist das Schlüsselwort durch den Konstruktor zu übergeben.

    Schreiben Sie für die beiden Klassen Caesar und Vigenere jeweils ein Applet, in dem der Klartext und der Geheimtext angezeigt werden, sowie der Schlüssel eingegeben werden kann. Jeweils ein Button soll die Chiffrierung bzw. Dechiffrierung aktivieren.


  19. Simulation des Lebens

  20. Es ist der Lebenszyklus eines Organismus zu simulieren. Dabei soll der Lebensraum durch ein 2-dimensionales Feld der Größe x * y mit x, y 3 dargestellt werden. Auf diesem Feld sollen dann zufällig a Organismen (a < (x * y)) verteilt werden. Dabei ist darauf zu achten, daß in jedem Feld nur jeweils ein Organismus Platz hat. Danach folgt die Simulation folgender Regeln:

    1. Vermehrung: erfolgt in einer leeren Zelle die genau drei Nachbarn besitzt

    2. Aussterben: erfolgt bei Isolation, d.h. nur noch ein oder kein Nachbar mehr vorhanden oder bei Überfüllung, d.h. vier oder mehr Nachbarn vorhanden

    Die Regeln der Simulation sollen nacheinander abgearbeitet und nach jedem Schritt graphisch dargestellt werden. Des weiteren soll die Simulation nach n Schritten oder nach Benutzer-Interaktion beendet sein. Als Eingabeparameter sollen x, y und a abgefragt werden.


Startseite