CoMa

Computerorientierte Mathematik

TU logo

Inhalt
.

Institut
 .  Vorlesungen
 .  .  CoMa
 .  .  .  ehemalige Zyklen
 .  .  .  .  CoMaI WS00/01
 .  .  .  .  .  Literatur
 .  .  .  .  .  Programmierregeln
 .  .  .  .  . Mailarchiv
 .  .  .  .  .  Programm 5
 .  .  .  .  .  Programm 6
 .  .  .  .  .  Programm 7
 .  .  .  .  .  Programm 8
 .  .  .  .  .  0/1 Challenge

back zurück

Mailarchiv zur Computerorientierte Mathematik I

Hier stehen alle Emails, die von uns an alle CoMa-Gruppen gleichzeitig geschickt wurden. Es handelt sich dabei im Wesentlichen um Ankündigungen, Aufgabenhinweise und -korrekturen.

Das gibt Euch die Möglichkeit, den Inhalt versehentlich von Euch gelöschter Emails (erneut) zu lesen.

Inhalt

Thu, 19 Oct 2000 17:20:39 +0200 (MEST), baier@math.tu-berlin.de
Zu Aufgabe 3
Fri, 27 Oct 2000 10:53:49 +0200 (MEST), liebchen@math.tu-berlin.de
.java, .class, .html
Fri, 27 Oct 2000 13:33:31 +0200 (MEST), liebchen@math.tu-berlin.de
Applets im Abseits
Thu, 02 Nov 2000 15:47:42 +0100, fest@math.tu-berlin.de
Ergänzungen zur Übung: Layouts
Thu Nov 2 18:19:53 MET 2000, fest@math.tu-berlin.de
neu: Email-Archiv
Fri Nov 10 14:48:32 MET 2000, fest@math.tu-berlin.de
Programmier-Richtlinien
Tue Nov 21 12:17:12 MET 2000, baier@math.tu-berlin.de
XEmacs
Fri Nov 24 15:19:47 MET 2000, fest@math.tu-berlin.de
Gruppenänderungswünsche
Tue Nov 28 14:24:41 MET 2000, liebchen@math.tu-berlin.de
Noch ein Stack!
Mon Dec 4 10:50:47 MET 2000, liebchen@math.tu-berlin.de
Musterlösung zu Aufgabe 17
Tue Dec 12 12:26:09 MET 2000, baier@math.tu-berlin.de
Homepage
Wed Dec 13 13:26:10 MET 2000, liebchen@math.tu-berlin.de
Zuckerbrot und Peitsche!
Wed Dec 20 14:33:28 MET 2000, liebchen@math.tu-berlin.de
Zwei Extras zu Weihnachten!
Fri Dec 22 13:21:51 MET 2000, fest@math.tu-berlin.de
Bewegen von Robotern
Fri Dec 22 14:32:15 MET 2000, liebchen@math.tu-berlin.de
Gruppenumordnung vom 21.12.2000
Tue Jan 2 15:52:05 MET 2001, fest@math.tu-berlin.de
Hinweise zur 6. und 7. Programmieraufgabe
Fri Jan 5 10:50:00 MET 2001, fest@math.tu-berlin.de
zur 7.Programmieraufgabe
Fri Jan 5 16:22:22 MET 2001, fest@math.tu-berlin.de
CoMa-Mailingliste
Mon Jan 8 11:17:13 MET 2001, fest@math.tu-berlin.de
Noch was zur 7.Programmieraufgabe
Fri Jan 12 17:55:16 MET 2001, fest@math.tu-berlin.de
Aufgabe 7 ist überarbeitet!
Tue Jan 23 14:57:49 MET 2001, fest@math.tu-berlin.de
Lesen & Schreiben, Dialoge
Wed Jan 31 14:09:12 MET 2001, fest@math.tu-berlin.de
0/1-Folgen vorhersagen
Fri Feb 9 17:48:43 MET 2001, liebchen@math.tu-berlin.de
Wiederholungsruecksprachen und Uebungen 14.02., 15.02.
Wed Feb 14 13:48:12 MET 2001, fest@math.tu-berlin.de
0/1-Raten

Emails


From: baier@math.tu-berlin.de
Date: Thu, 19 Oct 2000 17:20:39 +0200 (MEST)
Subject: Zu Aufgabe 3

Hallo liebe CoMa I Teilnehmer,
die dritte Aufgabe des ersten Uebungsblattes besteht darin, auf diese
Email per "reply" (Taste R in pine) zu antworten, wobei

a)  ihr diese Originalmail mit einfuegt
    (einfach die Frage "Include original message in Reply?" mit Y beantworten)
    und

b)  Ihr unter den mit "> " markierten Text die Zeile aus der Ausgabe des
    Befehls rusers kopiert, die fuer Euren aktuellen Rechner steht. Wie das
    geht, wird gleich erklaert.

Abschicken (mit CONTROL x) nicht vergessen!


Wie geht das mit dem Kopieren?

Fuehrt in einem anderen xterm als dem, in dem gerade dieser pine laeuft,
einmal das Kommando rusers aus. Es wird angezeigt, wer gerade auf welchem
Rechner eingeloggt ist (gut zu wissen, ob Freunde gerade da sind...).
Eine Zeile steht dabei auch fuer den Rechner, an dem Ihr gerade sitzt.
Insbesondere steht da dann auch mindestens Euer Name co1-1xx.

Jetzt fahrt bei gedrueckter LINKER MAUSTASTE einmal von links nach rechts
ueber diese Zeile. Sie wird schwarz gefaerbt. [*]

Jetzt bewegt Ihr die Maus wieder in das Fenster von pine (Maustaste
vorher loslassen), und zwar an die Stelle unter dem zitierten Text,
und drueckt einmal kurz die MITTLERE MAUSTASTE.  Voila, der Text ist
kopiert.

Jetzt koennt Ihr noch ein paar nette Worte dazuschreiben -- wenn Ihr
wollt -- und abschicken.


[*] Fussnote: Eventuell passte die ganze Liste nicht in das Fenster.
    Dann vergroessert es oder benutzt den "Scrollbalken" am linken Rand
    (Bedienung ist gewoehnungsbeduerftig: Klick (im Scrollbalken!) auf
    linke oder rechte Maustaste bewegt den Fensterinhalt ein Stueck hoch
    bzw. runter. Klick auf die mittlere Maustaste (Vorsicht: Nicht ins
    Fensterinnere rutschen -- da wird so ja eingefuegt!) stellt den 
    Scrollbalken auf die gewuenschte Position.
    Oder Ihr erinnert Euch an die Uebung und benutzt das pipe-Kommando 
    zusammen mit dem less-Kommando um die Ausgabe von rusers umzuleiten.

Gruss
  Eure CoMa-Betreuer


From: liebchen@math.tu-berlin.de
Date: Fri, 27 Oct 2000 10:53:49 +0200 (MEST)
Subject: .java, .class, .html

Liebe Comas,

gestern ist mir in der Uebung noch eine Sache durch
die Lappen gegangen: Wir haben zwar darueber gesprochen,
wie der Java-Quellcode auszusehen hat, aber der Schritt
zu Ausfuehrbarem blieb im Detail noch aus.

Daher hier eine Skizze:
1.) Ihr fertigt in einem Texteditor (emacs) euren
    Quellcode an und speichert diesen in einer Datei,
    die genauso anfaengt wie euer Klassenname und
    auf .java endet (SumWhile.java).
2.) Entweder ihr nutzt die von Georg vorgestellten
    Faehigkeiten des emacs, oder ihr tippt in einem
    xterm-Fenster
        javac SumWhile.java
    Das ist der Schritt, wo das interpretierbare
    class-File erstellt wird.
3.) Damit euer Applet in einem Browser angezeigt und
    ausgefuehrt werden kann, muss es in seiner Sprache
    bekannt gemacht werden, dies ist html (hypertext
    markup language).
    Ihr erstellt in einer weiteren Textdatei, die
        SumWhile.html
    heissen sollte (aber nicht muss), Zeilen wie
        <html>
        <body
        <applet code=SumWhile.class width=300 height=200></applet>
        </body>
        </html>
    Nachzulesen durch Klick auf eines der Applets der
    Coma-Homepage, und dann in netscape Menue
        View -> Page Source.
4.) Dann koennt ihr in einem weiteren xterm die Zeile
        appletviewer SumWhile.html
    tippen und die in dieser html-Datei genannte class-
    Datei wird als Applet ausgefuehrt.
Probleme kann dabei der Punkt (2) machen, wenn ihr euch
irgendwo vertippt hat. Aber nicht verzagen!

Christian


From: liebchen@math.tu-berlin.de
Date: Fri, 27 Oct 2000 13:33:31 +0200 (MEST)
Subject: Applets im Abseits

Liebe Comas,

da beim Zusammenspiel zwischen XServer, WindowManager und
appletviewer immer noch das Problem besteht, dass ein neu
geöffnetes Applet "ins Abseits" gestellt wird, hier ein
Tipp, wie ihr das Applet "einfangen" könnt.

Fahrt mit der Maus auf die untere oder rechte Rahmenkante
des Appletviewers. Dort angekommen drückt ihr dann eine
Maustaste, ich glaube die mittlere. In jedem Fall soll dann
ein so genanntes Kontextmenü aufgehen und wenn ihr dort ei-
nen Eintrag mit dem Namen  Move  seht, dann klickt einmal
mit der linken Maustaste drauf. Und schon folgt das Applet
eurer Maus, bis ihr es habt, wo ihr es haben wollt. Dann
drückt ihr einfach noch einmal die linke Maustaste und
es kann losgehen!

Christian


From: fest@math.tu-berlin.de
Date: Thu, 02 Nov 2000 15:47:42 +0100
Subject: Ergänzungen zur Übung: Layouts

Liebe CoMa-Studenten,

in der gestrigen Übung kamen einige Fragen zu den Layouts auf, die ich
leider zunächst unbeantwortet lassen musste. Ich hoffe, ich kann die
Fragen jetzt beantworten.

1. Wenn ich bei einem GridLayout Felder frei lassen will, was muß ich
   dann tun? 
   Ich hatte gesagt, man könne einfach
      add(null;)
   eingeben. Dies führt jedoch zu Compiler-Fehlern. Richtig geht es,
   in dem man ein leeres Panel einfügt:
      add( new Panel() );
   Nicht sehr elegant, aber es funktioniert...

2. Kann ich beim GridLayout ein Element an eine bestimmte Stelle
   packen oder geht es immer nur hinter das letzte ?
   Ein klares "Jein"!
   Also man kann nicht sagen, wenn noch nichts da ist, packe das
   Element an Position (3,2). Das geht leider nicht!
   Der Grund ist folgender:
   Die Elemente, die mit add eingefügt wurden, werden in einer Liste
   (was das genau ist, kommt erst später in der CoMa, aber man kann
   sich das wie eine Warteschlange vorstellen) gespeichert, ohne das
   die Position auf dem Bildschirm irgendwie festgelegt wird. Erst
   wenn das Applet gezeichnet wird, wird geguckt, welches Layout
   genommen werden soll, und bei GridLayout werden dann die Felder
   Zeilenweise mit den Elementen der Liste gefüllt. 
   Man kann jedoch in diese Liste zwischen zwei vorhandenen Positionen 
   ein weiteres Element einfügen mit 
      add(new Button("neu!"), pos);
   wobei pos eine int-Zahl ist und die position in der Liste angibt,
   an die das Element soll (funktioniert also wie Vordrängeln).

3. Kann man Elemente Nachträglich austauschen?
   Ja, wenn man die Position in der Liste weiß oder ein Element in
   einer Variablen gespeichert hat, kann man das Element mit
      remove(pos);
   oder mit
      remove(elementName);
   löschen und dann mit
      add(neuesElement,pos);
   ein anderes Einfügen.
   Das sollte allerdings nur selten nötig sein, da man meist nur den
   Inhalt eines Elements ändern will, und das geht mit
      element.setText("neuer Text");
   und ähnlichen Methoden einfacher und besser!

4. Was passiert, wenn ich ein GridLayout mit 3 Zeilen und 4 Spalten
   angelegt habe, und ich füge mit add ein dreizehntes Element hinzu?
   Das bringt - trotz 13 - kein Unglück! Das Layout wird einfach um
   eine Spalte erweitert, was allerdings zur Folge hat, dass die
   Elemente umgeordnet werden und so eventuell einige Elemente in
   höhere Zeilen rutschen.
   Das ist ein unschöner Nebeneffekt des Prinzips, die Elemente in
   einer Liste zu halten und dann das Layout in der Reihenfolge der
   Liste neu aufzufüllen. 

Okay, ich glaube, das waren alle Fragen zum Layout, die gestern
aufkamen.
Ich hoffe, es ist soweit klar geworden. Wenn ihr Aufgabe 10 vom
3.Übungsblatt am Rechner ausprobiert, nutzt die Gelegenheit und spielt
ein wenig mit den Layouts rum, probiert einfach alles mögliche aus.

Viel Spaß
Andreas


From: fest@math.tu-berlin.de
Date: Thu Nov 2 18:19:53 MET 2000
Subject: neu: Email-Archiv

Hallo @GROUP@,

es kann immer mal passieren, dass Ihr aus Versehen in pine (oder
einem anderen Emailprogramm) eine gelesene oder ungelesene Email
loescht.

Da wir glauben, dass unsere Rundschreiben an Euch natuerlich ganz
besonders wichtig sind, legen wir sie deshalb noch extra im
CoMa-Mailarchiv unter

<WWWLink href="">http://www.math.TU-Berlin.de/Vorlesungen/WS00/CoMa.1/Mailarchive.html">
http://www.math.TU-Berlin.de/Vorlesungen/WS00/CoMa.1/Mailarchive.html</WWWLink>

ab. Falls Ihr also eine Email mit den neuesten Hinweisen zur Hausaufgabe
geloescht habt, koennt Ihr sie dort nachlesen.

Gruss
Andreas

P.S.: Emails, die nur an EINE Gruppe von Euch gehen (Antworten auf erhaltene
Emails etwa), werden dort nicht gespeichert.


From: fest@math.tu-berlin.de
Date: Fri Nov 10 14:48:32 MET 2000
Subject: Programmier-Richtlinien

Hallo @GROUP@,

wenn ihr uns eure Programme vorführen wollt, achtet bitte schon vor der 
Programmabnahme darauf, dass ihr die Programmierregeln eingehalten habt, 
die unter 

<WWWLink href="">http://www.math.TU-Berlin.de/Vorlesungen/WS00/CoMa.1/styleguide.html">
http://www.math.TU-Berlin.de/Vorlesungen/WS00/CoMa.1/styleguide.html </WWWLink>

nachzulesen sind. Ab der Programmieraufgabe vom 4. Übungsblatt werden 
keine Programme mehr abgenommen, die diese Richtlinien nicht einhalten!

Noch ein kleiner Hinweis, wenn ihr den StringTokenizer verwenden wollt:
Vergeßt nicht das entsprechende Package in euer Applet zu importieren:

import java.util.StringTokenizer;

Ein schönes Wochenende wünscht
euer CoMaI-Team


From: baier@math.tu-berlin.de
Date: Tue Nov 21 12:17:12 MET 2000
Subject: XEmacs

Liebe Gruppe @GROUP@,

wiederholt mu{\ss}te ich mit ansehen, dass manche mehrere Versionen des
XEmacs starten. Dabei reicht eine aus. Daf\"ur gab es dann verschiedene
Gr\"unde. Unter anderem wollten manche sich von einem xterm aus eine
Datei ansehen und diese vielleicht auch \"andern. Nun denn, hier eine
L\"osungsm\"oglichkeit. 

1) Ihr schreibt eine Datei ".emacs" (der Punkt vor dem Dateinamen ist
wichtig!) Wenn Ihr diese Datei schon vorfindet (k\"onnte passieren, wenn
man Optionen gespeichert hat), so \"andert Ihr sie nur ab.

In diese Datei schreibt Ihr (am Anfang) folgende neue Zeile:
(gnuserv-start)
Genau so, mit diesen Klammern. 

2) Jetzt verlasst Ihr den XEmacs und startet ihn neu.

3) Was kann der XEmacs jetzt mehr als vorher? Nun ihr lasst i m m e r
einen XEmacs laufen (z.B. einen nach dem einloggen starten und nicht
wieder verlassen). Jetzt k\"onnt Ihr von einem beliebigen xterm aus den
XEmacs dazubewegen, dass er ein neues Frame (Fester) \"offnet. Statt

xemacs  dateiname  

schreibt Ihr einfach:

gnuclient  dateiname 

z.B.: gnuclient hallo

Dann bekommt Ihr von dem schon laufenden (!) XEmacs ein neues Frame in
dem die Datei hallo angezeigt wird (falls sie existiert sonst leeres
Fenster).

Wenn Ihr mit dem Lesen oder Editieren fertig seid, so verlasst Ihr den 
XEmacs nicht mit C-x C-c sondern mit:

C-x #

Denn Ihr wollt ja nur das neue Frame schlie{\ss}en und nicht den ganzen
XEmacs. 

4) F\"ur Spezialisten: Wer auch in Anderen Programmen einen Editor
verwendet (z.B. in pine), der kann diese Art des Aufrufs vom XEmacs
auch dort einrichten.  Dazu schreibt Ihr in die Datei ".cshrc" die
zus\"atzliche Zeile:

setenv EDITOR gnuclient 

Alle Programme, die diese Umgebungsvariable bentuzen, um einen Editor
aufzurufen werden nun statt des emacs (war die Voreinstellung) ein
neues Frame vom laufenden XEmacs anfordern. Das geht nat\"urlich
schneller. Wer seinen pine umstellen will, der muss noch im Setup-Menu 
den Editor \"andern.

Viel Spa{\ss},

Georg



From: fest@math.tu-berlin.de
Date: Fri Nov 24 15:19:47 MET 2000
Subject: Gruppenänderungswünsche

Hallo \@GROUP\@,

da sich entsprechenden Fragen langsam häufen, hier unsere aktuelle, 
offizielle Regelung zum Thema "Ich will in eine andere Gruppe":

Solang Gruppen noch aus mehr als zwei Mitgliedern bestehen, kann ein 
Wechsel erst nach der Klausur und Aufgabenblatt 7 erfolgen. 
Dann wird es eine größere Gruppenumsortierung geben, bei der 
evtl. Wünsche berücksichtigt werden, solange sich diese nicht 
wiedersprechen.

Ausnahme:

Zwei Zweiergruppen mit etwa gleichen Programmierkenntnissen und 
unproblematischem Punktestand können auch jetzt schon "fusionieren",
wenn
  - es uns bereits bekannt ist, dass es sich um Zweiergruppen handelt und
  - uns beide Gruppen Bescheid geben, dass sie mit der jeweils anderen 
    Gruppe zusammenarbeiten möchten.
In diesem Fall erhalten beide Gruppen eine gemeinsame Gruppennummer 
(jeweils die kleinere), und entsprechend einen gemeinsamen Account im 
Unix-Pool.

Alles weitere bezüglich der großen Gruppen-Umräum-Aktion erfahrt ihr dann 
noch rechtzeitig von mir.

Bis dahin viel Spaß bei der CoMa
Andreas


From: liebchen@math.tu-berlin.de
Date: Tue Nov 28 14:24:41 MET 2000
Subject: Noch ein Stack!

Liebe Gruppe @GROUP@,

nach euren zahlreichen Fragen zu Stacks, wie beispiels-
weise 
    "aber ein Stack ist doch eine dynamische
     Datenstruktur - warum muss ich denn da
     eine Größe vorgeben?"
habe ich mir ein Herz gefasst und eine andere Stack-Klasse
geschrieben. Diese kann nun wie es sich für einen ordent-
lichen Stack gehört dynamisch wachsen und weiterhin direkt
mit double-Werten arbeiten. Zu haben ist auch diese unter
der URL
    http://www.math.TU-Berlin.de/Vorlesungen/WS00/CoMa.1/program5/index.html#Stack

Gutes Gelingen!
Christian


From: liebchen@math.tu-berlin.de
Date: Mon Dec 4 10:50:47 MET 2000
Subject: Musterlösung zu Aufgabe 17

Liebe Gruppe @GROUP@,

da es bei den theoretischen Aufgaben des 5. Übungsblattes
sehr viele Lösungsvorschläge gab, die "nicht sehr nah" an
dem waren, was wir uns so vorgestellt haben, habe ich eine
Musterlösung der Aufgabe 17 aufgeschrieben. Seht euch ganz
in Ruhe an, wie die Schleifeninvariante formuliert ist,
und wie ihre Korrektheit unter Hinweis auf den Programmcode
mittels vollständiger Induktion nachgewiesen wird. Für viele
von euch mag es ungewohnt sein, aber es handelt sich in der
Tat um eine vollständige Induktion, obwohl gar kein Summen-
zeichen auftritt...

Ach so, das ganze könnt ihr unter der URL
http://www.math.TU-Berlin.de/Vorlesungen/WS00/CoMa.1/uebung5_muster.html
einsehen.

Viel Spaß beim Schmökern!
Christian


From: baier@math.tu-berlin.de
Date: Tue Dec 12 12:26:09 MET 2000
Subject: Homepage

Liebe @GROUP@,

mit etwas Verspätung sind jetzt von der letzten Woche der
Vokabeltrainer und das 8. Übungsblatt auf der Homepage verfügbar.

Viel Spaß,

Georg


From: liebchen@math.tu-berlin.de
Date: Wed Dec 13 13:26:10 MET 2000
Subject: Zuckerbrot und Peitsche!

Liebe Comas,

zuerst die gute Nachricht: Ihr könnt ab sofort die Modalitäten
unserer Klausur einsehen! Auf der Coma-Homepage befindet sich
ein entsprechender Hyperlink auf das Deckblatt der Klausur.
So habt ihr morgen die drei Minuten mehr Zeit zur Lösung der
Aufgaben, die ihr jetzt zum Lesen - und beherzigen! - der
beiden eingebauten Spezialitäten benötigt.

Jetzt die schlechte Nachricht: Im Prinzip ist keiner zufrieden
mit den bei der Rechnerbetreuung auflaufenden Wartezeiten.
Insbesondere das Überziehen um zuletzt mehr als 70(!) Minuten
ist unserer Ansicht nach darauf zurück zu führen, dass sich nicht
selten bis kurz vor Ende der betreuten Rechnerzeit kaum eine
Gruppe bei uns meldet, aber fünf Minuten vor dem Ende urplötzlich
zehn Gruppen einfällt, dass sie noch ein Programm abzugeben haben.

Daher gilt ab sofort folgende Regelung: Wer sich bei uns in einer
betreuten Rechnerzeit nicht spätestens 30 Minuten vor deren Ende
anmeldet, wird keinen Anspruch mehr darauf haben, dass wir noch
zu ihm kommen. Nur so glauben wir, gegen Ende einen hinreichenden
Überblick zu haben, wie viel Zeit wir noch bei jeder Gruppe ver-
bringen können, um wenigstens c.t. alle abgearbeitet zu haben.
Für andere Vorschläge von eurer Seite sind wir natürlich immer
offen!!!

Diese Regelung bedeutet insbesondere an Montagen, an denen ent-
weder die reguläre Bearbeitungszeit oder die Nachbearbeitungs-
zeit abläuft, dass eine Anmeldung nach 12:30:00 keine frist-
gerechte Abnahme mehr garantiert! Wenn natürlich ansonsten
nichts los ist, werden wir auch noch die sich bis zur vollen
Stunde anmeldenden Gruppen besuchen.

Christian


From: liebchen@math.tu-berlin.de
Date: Wed Dec 20 14:33:28 MET 2000
Subject: Zwei Extras zu Weihnachten!

Liebe Gruppe @GROUP@,

so kurz vor Weihnachten haben auch wir noch ein kleines
Geschenk für euch. Um genau zu sein, sogar zwei. Und es
ist doch immer gut etwas mehr zu haben, oder? Finden wir
auch! Und deshalb haben die Programmierrichtlinien jetzt
noch zwei Punkte mehr erhalten. Im Grunde geht es nur
darum, dass Exceptions - wie es der Name suggeriert - in
der Tat die Ausnahme bleiben sollten.

http://www.math.TU-Berlin.de/Vorlesungen/WS00/CoMa.1/styleguide.html

Zwar eröffnen Exceptions Möglichkeiten, die sich nicht
über return abbilden lassen. Beispielsweise kann ein Kon-
struktur sein Fehlschlagen nur durch den Wurf einer Exception
explizit mitteilen. (Wo wir gerade bei Konstruktoren wären:
Da an den beiden Stellen der Klausur, wo diese ins Spiel kamen,
so einiges angebrannt ist, bei dieser Gelegenheit noch drei
hyperlinks:

The Java Tutorial - originäre Erklärungen von Sun [english]
http://java.sun.com/docs/books/tutorial/java/data/objectcreation.html#instantiating

Java-Einführung - Erklärungsversuch in deutsch
http://www-pool.math.tu-berlin.de/doc/Java/jein1.html#object

The Java Language Specification - Fakten, Fakten, Fakten [english]
http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#41652)

Wo waren wir? Ach ja. Bei den Programmen, die ihr bislang
implementiert habt, sind Benutzereingaben eine externe Fehler-
quelle, um die herum mit Exceptions gearbeitet werden sollte.
Aber wenn ihr mit einem Stack arbeitet, dann könnt ihr vor jedem
top() bzw. pop() einmal isEmpty() fragen und könnt dann sicher
gehen, dass keine Exception kommen wird! Dies ist effektiver
und viel näher am Sinne des Erfinders und deshalb auch eine
neue Programmierrichtlinie.

Weiterhin frohes Schaffen,
und ein frohes Fest kann ich euch morgen beim Umtrunk noch wünschen!
Christian


From: fest@math.tu-berlin.de
Date: Fri Dec 22 13:21:51 MET 2000
Subject: Bewegen von Robotern

Liebe CoMa's,

 ich habe noch eine kleine Anmerkung zum Bewegen der Roboter in der Methode moveTowards.
Viele von Euch bewegen die Roboter, indem sie
matrix.setObject(altePosition,null);      
matrix.setObject(neuePosition,this);
schreiben. Besser (weil Verwendung bereits gegebenen Codes) ist      
matrix.moveObject(altePosition,neuePosition);
Dies ist auch für das Funktionieren des Counters und des Geschenke-Einsammelns in der 7.Programmieraufgabe Voraussetzung!

Ansonsten wünsche ich allen ein frohes Weihnachtsfest und ein gutes (erfolgreiches) neues Jahr.

Andreas


From: liebchen@math.tu-berlin.de
Date: Fri Dec 22 14:32:15 MET 2000
Subject: Gruppenumordnung vom 21.12.2000

Liebe @GROUP@,

wie ihr gestern und heute sicher mitbekommen habt,
haben wir ein paar der Coma-Gruppen umgeordnet, um
keinen, der nach der Klausur alleine da steht, auf
sich selbst gestellt zu lassen, und um euren Paarungs-
wünschen weitgehend zu entsprechen.

Die Einteilung der Gruppen sollte klar sein. Funktio-
nierende 4er-Gruppen bleiben bestehen. Auf drei Leute
geschrumpfte Gruppen behalten ihre Gruppennummer und
haben vereinzelt einen vierten Mann/Frau hinzu be-
kommen. Bestehende Pärchen haben bis auf co1-127 ihre
Gruppennummer behalten und ggf. einzelne Leute hinzu
bekommen. Die acht unter euch, die derzeit in Gruppen
stecken, bei denen nicht alle vier die Klausur bestan-
den haben, und die am 21.12.2000 nicht in der Übung
waren, müssen sich gleich zu Beginn des nächsten
Jahres unbedingt bei uns melden!!!
       ^^^^^^^^^^^^^^^^^^^^^^^^

Ebenfalls klar sein sollte, dass wir von jeder noch
aktiven Gruppe erneut die Lösung der Aufgabe 1(b) vom
1. Übungsblatt benötigen, Stichwort Members-Datei!
                                    ^^^^^^^^^^^^^
Diese werden wir uns zu dem Zeitpunkt ziehen, an dem
ihr das erste Mal ein Übungsblatt in der ggf. neuen
Konstellation abgebt, also am 11.01.2001 um 16:00.
Für diejenigen unter euch, deren Gruppennummer sich
geändert hat, besteht ab Freitag, dem 12.01.2001 die
Möglichkeit, dem UNIX-Pool-Team zu sagen, dass euer
Bibliotheksausweis nicht mehr den Account der Gruppe
co1-alt, sondern fortan den der Gruppe co1-neu frei
schalten soll.

Alle Klarheiten beseitigt?

Dann nochmals frohe Weihnachten!
Christian


From: fest@math.tu-berlin.de
Date: Tue Jan 2 15:52:05 MET 2001
Subject: Hinweise zur 6. und 7. Programmieraufgabe

Liebe CoMa's,

ich wünsche allen ein schönes neues Jahr.

Auch wenn der offizielle Abgabetermin für die 6.Programmieraufgabe 
ja bereits vorbei ist, kommen hier noch ein paar Hinweise und 
Verbesserungsvorschläge, die sich alle zu Herzen nehmen sollten. 

Zunächst einmal etwas zum Thema Directions:
In der Klasse MazeMatrix sind die vier symbolischen Konstanten 
NORTH, SOUTH, EAST, WEST definiert. 
Wann immer ihr eine bestimmte Richtung ansprechen wollt 
(z.B. in einer switch-Anweisung) ist es unschön, die Richtung direkt 
durch den entsprechenden int-Wert anzusprechen. Verwendet statt 
dessen bitte die symbolischen Konstanten. Das macht den Programm-Code 
leichter zu lesen.
Will man die Richtungen nacheinander in einer Schleife ansprechen, 
so ist das auch möglich:

for (int dir = MazeMatrix.NORTH; dir <= MazeMatrix.WEST; dir++ ) {
   ...
}

Hat man eine Richtung spezifiziert, z.B. in der Variable direction, 
und ist eine aktuelle Zelle der Matrix durch eine MazePosition pos 
gegeben, so erhält man die Koordinaten der benachbarten Zelle in 
Richtung direction z.B. so:

MazePosition nextCell = new MazePosition(pos.row,pos.col);
nextCell.row += dy[direction];
nextCell.col += dx[direction];

Dies ist möglich, da in den Arrays dx und dy für jede Richtung die 
Veränderungen der x- bzw. y-Koordinaten gespeichert ist. 
Mit Verwendung dieser Arrays kann man sich eigentlich jede 
switch-Anweisung in der Methode getNextCell sparen! 

Noch ein Hinweis:
Wenn der Roboter bewegt werden soll (Methode moveTowards), z.B. von
Position start nach Position stop, so habe ich schon mehrfach folgendes 
gesehen:

matrix.setObject(start, null);
matrix.setObject(stop, this);

Dies ist nicht falsch, aber besser ist die Verwendung der Methode 
moveObject:

matrix.moveObject(start, stop);

Warum das besser sein soll? Ganz einfach: Falls Ihr den freiwilligen 
Teil der 7.Programmieraufgabe (einsammeln der Geschenke) bearbeiten wollt, 
so sorgt die Methode moveObject für das Einsammeln der Geschenke und das 
zählen der Schritte im Labyrinth. Deshalb ist es besser, diese Methode zu 
verwenden. Klingt logisch, oder?

Also dann noch viel Erfolg bei der Bearbeitung der Programmieraufgaben.

Andreas 


From: fest@math.tu-berlin.de
Date: Fri Jan 5 10:50:00 MET 2001
Subject: zur 7.Programmieraufgabe

Liebe CoMa's!

Heute habe ich die unangehneme Pflicht, eine kleine 
Fehlerkorrektur bekanntzugeben!

In den Aufgabendetails zur 7.Programmieraufgabe steht
unter dem ersten Punkt

import digraph.*;
public class MyDigraph extends SimpleDigraph
{
  :
  :
}

Dies ist natürlich Müll. Es muß nämlich (wie in der 
Übung gesagt)

public class MyDigraph implements SimpleDigraph
                       ^^^^^^^^^^
heißen, da SimpleDigraph ja ein Interface ist.

Bitte beachtet das, wenn ihr Eure Graphenklasse implementiert.

Schönes Wochenende
Andreas


From: fest@math.tu-berlin.de
Date: Fri Jan 5 16:22:22 MET 2001
Subject: CoMa-Mailingliste

Liebe @GROUP@,

viele von Euch arbeiten zu Hause und kommen nur zur 
Programmabgabe in den Unix-Pool.
Dagegen ist prinzipiell nichts einzuwenden. Doch ab und an 
schicken wir wichtige Emails an Euch mit Hinweisen und 
Fehlerkorrekturen zu den Aufgaben oder Organisatorischem. 
Wenn ihr diese Emails dann irgendwann lest, wenn ihr mal 
wieder im Unix-Pool seid ist es vielleicht schon zu spät.

Deshalb haben wir jetzt eine Mailingliste für die CoMa 
eingerichtet, in die ihr Eure privaten Email-Addressen 
eintragen könnt, falls ihr stets aktuell von uns informiert 
sein wollt.

Eintragen in diese Liste könnt ihr Euch über die CoMa-Homepage 
oder das Email-Archiv.

Schönes Wochenende
Andreas


From: fest@math.tu-berlin.de
Date: Mon Jan 8 11:17:13 MET 2001
Subject: Noch was zur 7.Programmieraufgabe

Hallo CoMa's,

ich habe gerade in meinem Postkasten folgende Frage gefunden, die vielleicht 
mehreren von Euch Kopfschmerzen bereitet...

> Mir sind die methoden
>
> setShortestPathToDraw(obj, lastShortPath)
> und
> drawShortestPathTree(Graphics g, int xOffset, int yOffset, int
> cellWidth, int cellHeight);
>
> nicht klar.
>
> Wenn ich die mazeMatrix mit der methode setShortestPathToDraw aufrufe,
> was soll dann passieren?
>

Die Methode setShortestPathToDraw wird immer dann aufgerufen, wenn
entweder ein neues Object angeklickt wurde, für das die
Kürzeste-Wege-Matrix berechnet wurde oder sich diese Matrix für das
bisherige Object geändert hat. Die Methode erhält als Parameter sowohl das
Object (als Startknoten (=Wurzel) des Kürzesten-Wege-Baums) als auch seine
KW-Matrix.
Beides muß in globalen Variablen der Klasse gespeichert werden, damit
später beim zeichen darauf zugegriffen werden kann. Das kann dann etwa so
aussehen:
public class MyMazeMatrix extends MazeMatrixCollecting
{
    MazeObject startShortestPathTree=null;
    ShortestPathElement[][] shortestPathMatrix = null;
    :
    :
    /** Sets the Shortest Path predecessor matrix and the object to start
the shortest path tree.*/
    public void setShortestPathToDraw(MazeObject obj,
ShortestPathElement[][] shortestPath) {
      startShortestPathTree = obj;
      shortestPathMatrix = shortestPath;

    }
    :
    :
}

Übrigens: Methoden, deren Name mit set beginnt werden meist nur dazu
verwendet, die übergebenen Parameter in globalen Variablen zu speichern
(eventuell noch mit einer Konsistenz-Prüfung). So können auch
private-deklarierte Instanzvariablen von außen geändert werden, wobei in
der set-Methode jedoch noch Sicherheitüberprüfungen stattfinden können.

>
> Und woher nimmt die methode drawShortestPathTree die Information ueber
> den kuerzesten-Wege-Baum? Die steckt ja wohl in 'lastShortPath' und ist
> erstmal nur innnerhalb der methode  setShortestPathToDraw bekannt.
> Wie soll also 'drawShortestPathTree' wissen, was es zu zeichnen hat?
>

Naja, genau aus den oben genannten globalen Variablen! ;-)

Ich hoffe, Ihr kommt damit erstmal weiter, falls dennoch weitere Fragen
auftreten, so bin ich gern bereit, Auskunft zu erteilen.

Viel Spaß
Andreas


From: fest@math.tu-berlin.de
Date: Fri Jan 12 17:55:16 MET 2001
Subject: Aufgabe 7 ist überarbeitet!

Liebe @GROUP@,

die überarbeitete Aufgabenstellung zur 7.Programmieraufgabe 
ist endlich online!

Die neuen Fassungen der Interfaces SimpleDigraph und 
ShortestPathAlgorithm findet ihr nun
 - im Verzeichnis
   ~co1-002/robotmaze2/digraph/
 - im WWW unter
   http://www.math.TU-Berlin.de/Vorlesungen/WS00/CoMa.1/program_robot2/digraph/
 - sowie enthalten in den Download-Files
   Prog07.tar.gz  und
   Prog07.zip

Die Package-Dokumentationen sind an den entsprechenden Orten 
ebenfalls aktualisiert.

Es empfiehlt sich übrigens bei der Gelegenheit, auch das Package 
robotmaze upzudaten, da auch dort ein oder zwei kleine Fehler 
behoben wurden.


Ansonsten noch ein kleiner Hinweis, in Zusammenhang mit 
explodierenden Gegenständen:

Es kann passieren, dass man auf unerwartete NullPointerExceptions 
stößt, wenn man sich mittels getPosition() die Koordinaten eines 
Objects berechnen läßt, das gar nicht mehr in der Matrix existiert,
da daneben eine Explosion stattfand. Es ist deshalb günstig, nach 
jeder Abfrage von getPosition() zu überprüfen, ob man hier null 
erhalten hat und wenn dies der Fall ist, die folgenden Operationen 
nicht auszuführen! Dies gilt insbesondere beim Zeichnen des Graphen 
(z.B. für MissileLaunches)!

Schönes Wochenende
Andreas


From: fest@math.tu-berlin.de
Date: Tue Jan 23 14:57:49 MET 2001
Subject: Lesen & Schreiben, Dialoge

Liebe @GROUP@,

verzweifelt ihr gerade am Schreiben des 8.Programms, weil das 
mit dem Lesen von und Schreiben in Dateien nicht klappt? 

Dann kommt jetzt die Rettung:
Hier eine korrigierte Fassung dessen, was ich neulich in der Übung
erzählt habe.

Lesen aus der Datei geht z.B. so:

FileReader datei;
BufferedReader inputStream;

try {
  datei = new FileReader(directory+"/"+filename);
  inputStream = new BufferedReader(datei);
  
  while (inputStream.ready()) {
    System.out.println(inputStream.readLine()+"\n");
  }
  inputStream.close();
  datei.close();
}
catch(FileNotFoundException e){
  System.out.println("Open failed: "+filename+" not found!");
}
catch(IOException e) {
  System.out.println("Open failed: "+e.getMessage());
}


... und Schreiben geht analog:

FileWriter datei;

try {
  datei = new FileWriter(directory+"/"+filename);
  String text = "Das ist der String\nden ich schreiben will!\n";
		
  datei.write(text,0,text.length());
		
  datei.close();
}
catch(FileNotFoundException e){
  System.out.println("Save failed: "+filename+" not found!");
}
catch(IOException e) {
  System.out.println("Save failed: "+e.getMessage());
}



Wenn ihr den Benutzer was Fragen wollt, dann braucht ihr dazu einen 
geeigneten Dialog. Den kann man sich selber schreiben (extends Dialog)
oder man verwendet einen fertigen. 

Fertige Dialoge für Ja/Nein/Abbruch gibt's in Java aber erst seit 
Java1.2 (Swing-Klassen), z.B. in der Klasse JOptionPane, siehe z.B.
<WWWLink href="Java-Tutorial</WWWLink>">http://www-pool.math.tu-berlin.de/doc/javadoc/tutorial/ui/swing/dialog.html">Java-Tutorial</WWWLink>

Wenn ihr zu Hause aber Java 1.1.x habt, z.B. von der CoMa-CD, dann
müßt ihr den Dialog selber schreiben, oder den ganz einfachen 
QuestionDialog verwenden, den es auf der Web-Seite zur 
8.Programmieraufgabe gibt.
Habt ihr nicht Lust, diesen Dialog schöner/komfortabler zu gestalten?

Viel Spaß 
Andreas


From: fest@math.tu-berlin.de
Date: Wed Jan 31 14:09:12 MET 2001
Subject: 0/1-Folgen vorhersagen

Liebe @GROUP@,

in der Übung am vergangenen Donnerstag hab ich die Frage gestellt,
ob Menschen eine zufällige 0/1-Folge eintippen können.
Um dieser Frage nachzugehen wollen wir einen kleinen Programmier-Wettbewerb
starten. 

Wie das ganze ablaufen soll, verraten wir Euch auf der Internet-Seite
http://www.math.TU-Berlin.de/Vorlesungen/WS00/CoMa.1/program_rate01/

 
Viel Spaß und viel Erfolg wünscht 
Euer CoMa-Team


From: liebchen@math.tu-berlin.de
Date: Fri Feb 9 17:48:43 MET 2001
Subject: Wiederholungsruecksprachen und Uebungen 14.02., 15.02.

Liebe Gruppe @GROUP@,

die Wiederholungsrücksprachen werden am Donnerstag, den 01. März 2001
stattfinden. Dann habt ihr hoffentlich genug Zeit, Stoff nachzuarbei-
ten und/oder noch einmal im UNIX-Pool - der die ersten beiden Wochen
der vorlesungsfreien Zeit geöffnet haben sollte - in die Tasten zu
greifen. Die genauen Termine können wir erst festlegen, wenn wir wissen,
wie viele Studenten wir noch einmal befragen werden.

Wer an diesem Tag aus dringendem Grund nicht kann, kann direkt mit
Herrn Möhring einen Termin vereinbaren. Aber das soll halt, wie eben
in Java mit Exceptions, die absolute Ausnahme bleiben.

Der Übungsbetrieb wird in der nächsten Woche folgendermaßen aussehen:
Mittwoch 16-18, also unmittelbar vor dem Umtrunk, und Donnerstag 16-18.
Ihr seid an dieser Stelle noch einmal herzlich eingeladen, uns mitzutei-
len, zu welchen Themengebieten ihr noch einmal etwas von uns hören
möchtet. Rekursion? Sortieren? static? Klassen und Objekte? Was wollt
ihr vor Beginn des nächsten Semesters (noch) besser im Griff haben?
Mailt uns eure Wünsche, am besten rechtzeitig!

Dann spätestens bis zum Umtrunk!
Christian


From: fest@math.tu-berlin.de
Date: Wed Feb 14 13:48:12 MET 2001
Subject: 0/1-Raten

Liebe @GROUP@,

leider ist unser kleiner Programmier-Wettbewerb nicht gerade
auf große Resonanz gestoßen. Woran lag's? Zu viele Klausuren 
oder habt ihr kein Interesse?
Dennoch wird es heute Abend wohl einen Sieger des Wettbewerbs 
geben.

Ich würde mich sehr freuen, wenn die eine oder der andere von 
Euch noch bis zum Umtrunk eine 0-1-Folge bei mir eintippt, 
damit wir wenigstens da ein paar mehr Teilnehmer haben.

Viele Grüße
Andreas

top top
zuletzt bearbeitet: Tue Sep 8 2009, zuletzt erstellt: Tue Sep 8 2009
Jens Schulz <jschulz at math.tu-berlin.de>
Validate HTML