Freitag, 30. April 2010

 

Robocup Junior 2010

Wir sind in Villach beim Robocup angekommen. Ich werde hier berichten.

Labels: ,


Montag, 26. April 2010

 

ANT - encoding von Source

Sollte der Sourcecode anders codiert sein als build.xml, so sollte man sicherheitshalber beim <javac>-Task das Encoding angeben:
<javac srcdir="${src.dir}" destdir="${bin.dir}" encoding="ISO-8859-1">
  <classpath refid="project.classpath" />
</javac>
Besser ist es jedoch, grundsätzlich utf-8 zu verwenden: für Sourcecode und für das ANT-Script build.xml. Für den Sourcecode muss man den Text-Editor entsprechend einstellen, beim Ant-Script muss man zusätzlich das Encoding definieren:
<?xml version="1.0" encoding="UTF-8"?>
Sollte utf-8 nicht die Standard-Codierung des Betriebssystems sein, auf dem man entwickelt, so muss man beim direkten Übersetzen mit javac das Encoding angeben:
javac -encoding UTF-8 *.java

Labels: ,


Mittwoch, 21. April 2010

 

Xref (Cross Referenz)

Erstellen Sie ein Java-Program, welches für jedes gelesene Wort bestimmt, in welchen Zeilen es vorkommt.
Gegeben sei folgende Eingabe:

Das ist die erste Zeile und
das ist die zweite Zeile und
hier folgt die dritte Zeile.
Satzzeichen gelten als Trenner.
Folgendes ist kein W0rt und das
4uch nicht.

Das Programm soll dann diese Ausgabe liefern.
als (1): 4
Das (3): 1, 2, 5
die (3): 1, 2, 3
dritte (1): 3
erste (1): 1
Folgendes (1): 5
folgt (1): 3
gelten (1): 4
hier (1): 3
ist (3): 1, 2, 5
kein (1): 5
nicht (1): 6
Satzzeichen (1): 4
Trenner (1): 4
und (3): 1, 2, 5
Zeile (3): 1, 2, 3
zweite (1): 2

Es erzeugt also eine Liste von Worten (in der zuerst vorkommenden Schreibweise), mit der Anzahl der Vorkommnisse in Klammern und dann einer Liste von Zeilennummern.

Verwenden Sie dazu einen binären Baum für die Wörter und Listen für die Zeilennummern. Das bedeutet, dass wir einen Baum haben bei dem jeder Knoten eine Liste von Zeilennummern "enthält".


Das Programm soll von der Standardeingabe oder von beliebig vielen Dateien lesen.
Zur Erkennung von Wörtern lesen Sie hier: Wörter in der Eingabe erkennen


Nennen Sie das Projekt xref (also z.B. 2ad-maierhofer-java-xref) und geben Sie am CVS ab.

Labels: , ,


 

Binäre Bäume - Suchen von Namen und/oder Telefonnummern


Immer wieder will man nicht nur die Telefonnummer zu einem Namen suchen sondern auch umgekehrt zu einer Telefonnummer den Namen. Folgendes Programm hilft:
Erstellen Sie ein Programm Telefonsuche.java, welches aus einer (oder mehreren) Datei(en) Telefondaten einliest (Name, Vorname, Telefonnummer - entsprechende Klasse) und in zwei Bäume einträgt. Ein Baum sortiert nach Name, der zweite sortiert nach Telefonnummer. Dabei gibt es grundsätzlich zwei Möglichkeiten:
- die Klasse hat jeweils zwei Paare von Nachfolgern, für jede Sortierung
- die Klasse hat nur ein Paar von Nachfolgern, eine Kopie wird im zweiten Baum eingetragen
Das Programm soll dann einfach einen String einlesen und zunächst im Namenbaumsuchen. Kommt der String nicht vor, so ist dann im Nummernbaum zu suchen.
Wie kann man nur nach Teilen des Namens bzw. der Nummer suchen?
Nennen Sie das Projekt telefonsuche, also z.B. 2ad-maierhofer-java-telefonsuche.

Labels: , ,


 

Worthäufigkeiten mit binärem Baum ermitteln

Erstellen Sie ein Java-Programm welches für jedes gelesene Wort bestimmt, wie oft es vorkommt. Nach dem Ende der Eingabe (EOF) ist eine Liste von Worten und deren Häufigkeiten auszugeben.
Ein Beispiel, gegeben sei folgende Eingabe:

Das ist die erste Zeile und
das ist die zweite Zeile und
hier folgt die dritte Zeile.
Satzzeichen gelten als Trenner.
Folgendes ist kein W0rt und das
4uch nicht.

Das Programm soll dann diese Ausgabe liefern.

als 1
Das 3
die 3
dritte 1
erste 1
Folgendes 1
folgt 1
gelten 1
hier 1
ist 3
kein 1
nicht 1
Satzzeichen 1
Trenner 1
und 3
Zeile 3
zweite 1

Es erzeugt also eine Liste von Worten (in der zuerst vorkommenden Schreibweise), mit der Anzahl der Vorkommnisse.
Das Programm soll von der Standardeingabe oder von beliebig vielen Dateien lesen.
Zur Erkennung von Wörtern lesen Sie hier: Wörter in der Eingabe erkennen

Verwenden Sie dazu einen binären Baum für die Wörter.
Nennen Sie das Projekt hauf (also z.B. 2ad-maierhofer-java-hauf) und geben Sie am CVS ab.

Labels: , ,


Sonntag, 11. April 2010

 

ANT - ein Beispiel build.xml

AntDemo sei ein Projekt, das etwa so wie in dem Bild aussieht. Es enthält neben dem Sourcecode auch eine externe Library, im Verzeichnis vendor gespeichert.
Die Datei build.xml enthält die Konfiguration für ANT zum Übersetzen, Testen und Erzeugen der fertigen Anwendung.
Das Beispiel enthält nur eine einfache Datumsklasse und die entsprechenden Unit-Tests.

Den Sourcecode zum build.xml finden Sie hier: build.xml

Der Aufruf ant ohne Parameter (wenn die Datei build.xml heißt, sonst müsste man etwa ant -buildfile build_1_1.xml angeben) übersetzt alles und erzeugt im build-Verzeichnis die ausführbare Datei antdemo.jar.
ant test führt die Unit-Tests aus.
ant clean löscht alle erzeugbaren Dateien/Verzeichnisse.

Im build.xml werden Ziele (targets) mit entsprechenden Abhänggkeiten definiert. Ant kann verschiedene Aufgaben ausführen, so ruft <javac> den Java-Compiler auf.
Weitere Informationen gibt es unter CRISP, ANT und JAR.
Quickreference für Ant: AntCoreRef.pdf

Labels: , ,


Mittwoch, 7. April 2010

 

Aufgabe Verkettete Listen - Partner finden für Tanzkurs

Teilnehmerinnen und Teilnehmer melden sich zu einem Tanzkurs an. Der Tanzlehrer stellt die Paare zusammen, indem er immer eine Frau aus der Liste der Teilnehmerinnen und einen Mann aus der Liste der Teilnehmer nimmt (und streicht).

Eine Liste wird immer vollständig leer werden, die zweite kann noch TeilnehmerInnen enthalten.

Aufgabenstellung mit verketteten Listen


Erstellen Sie ein Programm, welches zwei Dateien, in denen die Namen sind, liest und die Namen in die entsprechende Liste (alphabetisch sortiert) einfügt.

Die Zusammenstellung der Paare erfolgt dann so, dass jeweils ein (zufälliges) Element aus der ersten Liste und ein (zufälliges) Element aus der zweiten Liste entfernt. Im einfacheren Fall wird das Paar einfach ausgegeben und die beiden Listenelemente freigegeben (alle Referenzen auf die Listenelemente auf null setzen, sodass der Garbage Collector den Speicher freigeben kann). In der fortgeschrittenen Lösung wird das Paar in eine spezielle Liste übernommen, deren Elemente jeweils Referenzen auf die beiden Teilnehmer enthält. Zum Schluss wird diese Liste ausgegeben.

Mögliche Datenstrukturen


class Teilnehmer {
   Teilnehmer next;
   String name;
}
An geeigneter Stelle sollte es etwas wie folgt geben:
Teilnehmer frauen = null;
Teilnehmer maenner = null;

Für Paare wird es eine eigene Datenstruktur (Klasse) geben:
class Paar {
   Paar next;
   Teilnehmer frau;
   Teilnehmer mann;
}
An geeigneter Stelle sollte es etwas wie folgt geben:
Paar paare = null;

Gesamtprogramm und Tests


Aufrufbeispiel bei zufälliger Auswahl der Tanzpartner:
hp@l211 $ java TanzkursListe male female
6  Paare
========

       Felix <-> Petra
       Franz <-> Sonja
      Harald <-> Elke
      Martin <-> Gabi
       Peter <-> Karin
    Reinhold <-> Brigitte

Übriggebliebene
===============

Andrea

Dabei enthält die Datei male die Namen der Männer und female die Namen der Frauen:
male
Harald
Franz
Martin
Felix
Peter
Reinhold
female
Gabi
Elke
Sonja
Brigitte
Karin
Petra
Andrea

Nach dem Einlesen der Dateien sollten zwei Listen, etwa wie im Bild skizziert, enstehen:

Die Zuordnung der Paare erzeugt eine Liste wie folgt. Eine Dame bleibt bei in der Liste frauen:

Labels: , ,


Samstag, 3. April 2010

 

Android - Robotik

Was hat Android mit Robotik zu tun? Alleine die Definition von Android im Wiktionary gibt schon einen schönen Bezug: "Roboter in menschenähnlicher (meist männlicher) Gestalt und mit menschenähnlichem Verhalten"
Das ist eine Seite. Eine weitere Verwendung von Android ist die der Plattform für mobile Geräte (Handys), die den Ursprung in Linux hat.
Aber ich habe heute eine weitere Verbindung im Netz gefunden: Ein Android-Handy steuert einen Roboter:

Hier ein Video in Aktion:

Nähere Informationen zu den Cellbots gibt es unter: http://www.cellbots.com und http://code.google.com/p/cellbots/
Zu Scripting für Android (wird bei den Robotern verwendet): http://code.google.com/p/android-scripting/

Da tun sich ja interessante Möglichkeiten auf, Scripting von Android-Handys und neue Roboter!

Labels: ,


This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]