<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=85.179.156.104</id>
	<title>FreitagsrundenWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=85.179.156.104"/>
	<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//Spezial:Beitr%C3%A4ge/85.179.156.104"/>
	<updated>2026-11-01T06:03:24Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/DiffusionLimitedAggregation&amp;diff=15854</id>
		<title>Javakurs/Übungsaufgaben/DiffusionLimitedAggregation</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/DiffusionLimitedAggregation&amp;diff=15854"/>
		<updated>2011-03-23T16:40:58Z</updated>

		<summary type="html">&lt;p&gt;85.179.156.104: /* Georg */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Als [http://en.wikipedia.org/wiki/Diffusion-limited_aggregation Diffusion Limited Aggregation], kurz DLA, bezeichnet man physikalische Vorgaenge bei denen sich Teilchen durch [[wikipedia:Brownsche Bewegung| Brownsche Bewegung]] zufällig bewegen und bei Kontakt mit anderen Teilchen anlagern. Diese Vorgänge können leicht am Computer simuliert werden und erzeugen sehr schöne Gebilde, die zu der Klasse der [http://de.wikipedia.org/wiki/Fraktal Fraktale] gehören. In dieser Aufgabe soll es darum gehen, eine solche DLA-Simulation zu programmieren.&lt;br /&gt;
&lt;br /&gt;
Eine solches Programm könnte z.B. so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dla.png]]&lt;br /&gt;
&lt;br /&gt;
Lass dich jetzt nicht von der scheinbaren Komplexität des Programms abschrecken! Es ist nicht komplex UND du wirst schrittweise zur Lösung geführt. Am Ende kannst du dann noch ein wenig selbst mit dem Programm experimentieren.&lt;br /&gt;
&lt;br /&gt;
== Die Theorie ==&lt;br /&gt;
Um ein möglichst gleichmäßiges Wachstum des DLA-Fraktals zu erreichen, setzt man in der Mitte des Bildschirms einen Keim und lässt auf einer Kreisbahn (grün) um das Zentrum einen neuen Partikel erscheinen. Diesen Partikel bewegt man zufällig über die Ebene (blaue Bahnen). Entfernt sich der Partikel zu weit vom Zentrum (schwarzer Kreis), so wird er verworfen (rote Bahn) und ein neuer Partikel erzeugt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dla_mechanism.png]]&lt;br /&gt;
&lt;br /&gt;
Die Radien der Kreise sollten mit der Größe des DLA-Fraktals wachsen. Dazu überprüft man bei jeder Anlagerung eines Partikels, ob sich das Fraktal vergrößert hat und ändert gegebenenfalls den Radius. Ein Partikel hat außer seiner Existenz keine weiteren besonderen Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
=== Vorüberlegungen ===&lt;br /&gt;
Soweit so gut. &#039;&#039;&#039;Nun bist du ein wenig gefragt!&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lies dir die folgenden Fragestellungen durch, und denke darüber nach.&lt;br /&gt;
&lt;br /&gt;
# Die Partikel werden in einer 2-dimensionalen Ebene gespeichert. Welche Datenstruktur aus Java kann man besonders gut verwenden, um viele Partikel abzuspeichern?&lt;br /&gt;
# Wie würde man überprüfen, ob der beobachtete Partikel einen anderen berührt?&lt;br /&gt;
# Wie kann man einen Partikel über die Fläche bewegen? Wie erzeugt man eine [http://en.wikipedia.org/wiki/Brownian_motion Brownsche Bewegung]?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
=== Lösungen ===&lt;br /&gt;
# Ein 2-dimensionales Array von genau der Größe der zu simulierenden Fläche bietet sich an. Als Datentyp würde &#039;&#039;boolean&#039;&#039; genügen, denn wir wollen nur wissen, ob sich an der Position (x,y) ein Partikel befindet oder nicht. Dem Autor ist aber &#039;&#039;int&#039;&#039; sympathischer ;)&amp;lt;br/&amp;gt;&#039;&#039;int[][] field = new int[256][256];&#039;&#039;&lt;br /&gt;
# Jedes der 8 benachbarten Felder um die Position des gerade betrachteten Partikels muss überprüft werden. Ist dort ein Partikel vorhanden, so enthält das Feld einen Wert &amp;gt;0.&lt;br /&gt;
# [http://javadocs.org/Math Math.random()] erzeugt zufällige Zahlen. Mit deren Hilfe kann man über eine Fallunterscheidung die X- und Y-Koordinate des Partikels inkrementieren oder dekrementieren. Dadurch bewegt sich das Teilchen einen Schritt weiter.&lt;br /&gt;
&lt;br /&gt;
== Die Praxis ==&lt;br /&gt;
Da diese Aufgabe ziemlich komplex ist, werden schrittweise alle nötigen Bausteine entwickelt.&lt;br /&gt;
=== Grafik ===&lt;br /&gt;
Zur Grafikdarstellung gibt es die einfach zu bedienende Klasse &amp;quot;Pad&amp;quot;, die ein Fenster erstellt, in dem du mit einfachen Routinen zeichnen kannst.&lt;br /&gt;
&lt;br /&gt;
Falls du noch nicht die ÜBB-Klassen in deinem Javakurs-Verzeichnis hast, lade dir von [http://www.uebb.tu-berlin.de/menue/forschung/buecher/pepper_programmieren_lernen_eine_grundlegende_einfuehrung_mit_java_1_und_2_auflage/ der ÜBB-Seite] die Klassen Pad, Point und Terminal herunter und lege sie in das Verzeichnis ab, in dem auch dein Programm entstehen soll. Wenn du dies getan hast, steht dir die Grafikfunktionalität zur Verfügung. In dieser Aufgabe werden die notwendigen Grafikbefehle vorgeben, du musst dir keine Sorgen machen, dass du dies nicht schaffst.&lt;br /&gt;
&lt;br /&gt;
=== Schritt fuer Schritt ===&lt;br /&gt;
# Erstelle eine Klasse &#039;&#039;DLA&#039;&#039;&lt;br /&gt;
# Füge in der ersten Zeile folgenden import hinzu: &#039;&#039;import java.awt.Color;&#039;&#039;. Was genau dies bedeutet, wird in Vortrag 6 erklärt.&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static int limit(int value, int lower, int upper)&#039;&#039;, die überprüft, ob sich der Wert &#039;&#039;value&#039;&#039; innerhalb der Grenzen &#039;&#039;lower&#039;&#039; und &#039;&#039;upper&#039;&#039; befindet. Ist dies nicht der Fall, soll der Wert auf diesen Bereich beschränkt zurückgegeben werden.&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static boolean testPixel(int[][]field, int x, int y)&#039;&#039;, die überprüft, ob an einem bestimmten Punkt im 2-dimensionalen Array ein Wert &amp;gt;0 vorliegt. Fange dabei ungültige Werte für x und y ab. Benutze dazu die &#039;&#039;limit&#039;&#039; Methode.&lt;br /&gt;
# Teste die &#039;&#039;testPixel(...)&#039;&#039;-Methode!&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static boolean isTouching(int[][] field, int x, int y)&#039;&#039;, die überprüft, ob sich in einem der 8 umliegenden Felder ein Partikel befindet. Benutzte dabei die &#039;&#039;testPixel(...)&#039;&#039; Methode.&lt;br /&gt;
# Teste diese Methode!&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static boolean inRange(int x, int y, int maxR, int maxX, int maxY)&#039;&#039;, die überprüft, ob sich die Koordination &#039;&#039;x&#039;&#039; und &#039;&#039;y&#039;&#039; in einem Rechteck der Seitenlänge &#039;&#039;maxX&#039;&#039; und &#039;&#039;maxY&#039;&#039; innerhalb eines Abstandes &#039;&#039;maxR&#039;&#039; vom Mittelpunkt befindet.&lt;br /&gt;
# Teste diese Methode!&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static int moveRandom(int movePixel)&#039;&#039;, die eine Zahl (Koordinatenkomponente) mit &#039;&#039;&#039;gleichen&#039;&#039;&#039; Wahrscheinlichkeiten inkrementiert (+1), unverändert lässt (+/-0) oder erniedrigt (-1).&lt;br /&gt;
# Test kurz diese Methode.&lt;br /&gt;
# Schreibe die Methode &#039;&#039;public static void setPixel(Pad drawPad, int[][]field, int x, int y, Color c)&#039;&#039;. Diese überprüft noch einmal die Gültigkeit der Koordinaten &#039;&#039;x&#039;&#039; und &#039;&#039;y&#039;&#039;, platziert dann im Array &#039;&#039;field&#039;&#039; an diesen Koordinaten einen Partikel und zeichnet den Partikel auf dem &#039;&#039;drawPad&#039;&#039; wie folgt:&lt;br /&gt;
&lt;br /&gt;
 drawPad.setColor(c);&lt;br /&gt;
 drawPad.drawDot(x, y);&lt;br /&gt;
&lt;br /&gt;
Die Klasse Color wird in der Java Dokumentation natürlich erklärt: http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Color.html&lt;br /&gt;
Du kannst mit &#039;&#039;color.black&#039;&#039; auf vordefinierte Farbe zugreifen oder neue Farben über ihre RGB Werte erstellen.&lt;br /&gt;
&lt;br /&gt;
=== Main ===&lt;br /&gt;
Schreibe nun die main-Methode für das DLA-Programm.&lt;br /&gt;
Wenn dir die Struktur des Programms schon klar ist, dann kannst du gern allein versuchen, das Problem zu lösen. Hier sei noch ein Code-Fragment zum Berechnen von Koordinaten auf einem Kreis gegeben:&lt;br /&gt;
&lt;br /&gt;
 //einen Punkt auf einem Kreis um den Mittelpunkt mit dem Radius&lt;br /&gt;
 //maxR+20 erzeugen&lt;br /&gt;
 double x = Math.toRadians(Math.random()*360);&lt;br /&gt;
 int movingPixelX = limit((int)(Math.cos(x)*(maxR+20))+maxX/2, 0, maxX);&lt;br /&gt;
 int movingPixelY = limit((int)(Math.sin(x)*(maxR+20))+maxY/2, 0, maxY);&lt;br /&gt;
&lt;br /&gt;
zusätzlich noch Code um das Grafikfenster zu initialisieren:&lt;br /&gt;
&lt;br /&gt;
 //Fenster fuer Grafikausgabe vorbereiten und anzeigen&lt;br /&gt;
 Pad drawPad = new Pad();&lt;br /&gt;
 drawPad.setBackground(Pad.black);&lt;br /&gt;
 drawPad.setPadSize(maxX, maxY);&lt;br /&gt;
 drawPad.setVisible(true);&lt;br /&gt;
 drawPad.setColor(Pad.white);&lt;br /&gt;
&lt;br /&gt;
Die Klasse Pad bietet ausserdem einige Farbwerte vom Typ &#039;&#039;Color&#039;&#039; an, dir du einfach so benutzen kannst.&lt;br /&gt;
 Pad.white&lt;br /&gt;
 Pad.black&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls dir noch nicht ganz klar ist, wie alles zusammen wirken soll, benutze folgenden Rumpf, der schon die Grafik-Funktionalität und andere Vorgaben enthält:&lt;br /&gt;
&lt;br /&gt;
 import java.awt.Color;&lt;br /&gt;
 &lt;br /&gt;
 class DLA {&lt;br /&gt;
 	public static void main(String[] args) { 		&lt;br /&gt;
 		//Feld fuer Kollisionsueberpruefung erstellen&lt;br /&gt;
 		int[][] field = ...&lt;br /&gt;
 &lt;br /&gt;
 		&lt;br /&gt;
 		//Grenzen fuer Koordinaten der Partikel aus field berechnen (.length verwenden)&lt;br /&gt;
 		int maxX = ...&lt;br /&gt;
 		int maxY = ...&lt;br /&gt;
 &lt;br /&gt;
 		//Fenster fuer Grafikausgabe vorbereiten und anzeigen&lt;br /&gt;
 		Pad drawPad = new Pad();&lt;br /&gt;
 		drawPad.setBackground(Pad.black);&lt;br /&gt;
 		drawPad.setPadSize(maxX, maxY);&lt;br /&gt;
 		drawPad.setVisible(true);&lt;br /&gt;
 		drawPad.setColor(Pad.white);&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
 		//&amp;quot;Samen&amp;quot; erzeugen. Also den ersten Partikel in der Mitte des Feldes setzen (Color: Pad.white)&lt;br /&gt;
 		setPixel(...);&lt;br /&gt;
 		&lt;br /&gt;
 		//Radius des Partikels der am weitesten vom Zentrum entfernt ist&lt;br /&gt;
 		int maxR=0;&lt;br /&gt;
 		&lt;br /&gt;
 		//Schleifenkopf, solange maxR nicht den Rand des Fensters&lt;br /&gt;
 		//beruehrt, sollen neue Punkte gezeichnet werden&lt;br /&gt;
 		while(...) {&lt;br /&gt;
 			//einen Punkt auf einem Kreis um den Mittelpunkt mit dem Radius&lt;br /&gt;
 			//maxR+20 erzeugen&lt;br /&gt;
 			double x = Math.toRadians(Math.random()*360);&lt;br /&gt;
 			int movingPixelX = limit((int)(Math.cos(x)*(maxR+20))+maxX/2, 0, maxX);&lt;br /&gt;
 			int movingPixelY = limit((int)(Math.sin(x)*(maxR+20))+maxY/2, 0, maxY);&lt;br /&gt;
 			&lt;br /&gt;
 			//Schleife zum bewegen des Partikels&lt;br /&gt;
 			//while(!isTouching(...) &amp;amp;&amp;amp; inRange(..., ..., maxR+30, ..., ...))&lt;br /&gt;
 			{&lt;br /&gt;
 				//Partikelkoordinaten zufaellig bewegen (moveRandom)&lt;br /&gt;
 				movingPixelX = ...&lt;br /&gt;
 				movingPixelY = ...&lt;br /&gt;
 			}&lt;br /&gt;
 			&lt;br /&gt;
 			//Schleife zuende, ueberpruefe ob eine Beruehrung vorliegt:&lt;br /&gt;
 			if(isTouching(...)) {&lt;br /&gt;
 				//Farbwertberechnung fuer 1337 blau-Effekt&lt;br /&gt;
 				int k = limit(255-(int)(255*((double)maxR*2)/(double)maxX), 0, 255);&lt;br /&gt;
 				Color c = new Color(k, k, 255);&lt;br /&gt;
 				&lt;br /&gt;
 				//den Partikel setzen und zeichnen&lt;br /&gt;
 				setPixel(...);&lt;br /&gt;
 				&lt;br /&gt;
 				//Radius zum Mittelpunkt berechnen,&lt;br /&gt;
 				//wenn groesser als altes Maximum, ueberschreiben&lt;br /&gt;
 				...&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		 		&lt;br /&gt;
 		return;&lt;br /&gt;
 	}&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Hinweis: Koordinaten im Computer ==&lt;br /&gt;
Am Computer werden Koordination, historisch bedingt, anders behandelt als im rechtwinkligen Koordinatensystem. Koordination im Computer werden von links nach rechts, als X-Achse und &#039;&#039;&#039;von oben nach unten&#039;&#039;&#039; als Y-Achse berechnet. Beachte dies bei der Verwendung von &#039;&#039;drawPad.drawDot(x,y)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 (0,0)-------------------- X&lt;br /&gt;
 |                  (640,0)&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 | (0,480)          (640,480)&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Als kleine Starthilfe folgt ein Beispiel, wie so ein Kommentar formatiert sein könnte. Mit &amp;quot;Vorschau zeigen&amp;quot; kannst du dir ansehen, was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.&lt;br /&gt;
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Georg ===&lt;br /&gt;
Super Aufgabe :) Macht Spaß die Bilder zu erstellen ;)&lt;br /&gt;
&lt;br /&gt;
Braucht bei mir aber leider relativ lange, wäre interessant wie man die Simulation maximal beschleunigt. Interessant ist weiterhin das das Bildaufbauen bei mir zu Hause signifikant länger braucht als @TUB.&lt;br /&gt;
&lt;br /&gt;
==== Robert ====&lt;br /&gt;
Na mal schauen, ob irgendjemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.&lt;br /&gt;
&lt;br /&gt;
== Dirks Verbesserungsvorschläge ==&lt;br /&gt;
&lt;br /&gt;
testPixel in isPixel oder isPixelEmpty&lt;br /&gt;
movePixel in movingPixelKoordinate umbenennen&lt;br /&gt;
&lt;br /&gt;
moveRandome in moveKoordinateRandome&lt;br /&gt;
&lt;br /&gt;
== Brandons Kommentar ==&lt;br /&gt;
Die Anweisung für setPixel ist Irreführend. Bei der jetzigen Formulierung geht man davon aus das das Einfügen von &amp;quot;drawPad.setColor(c);&lt;br /&gt;
drawPad.drawDot(x, y);&amp;quot; ausreicht. Dabei muss man das Einfügen des Punktes in das Array selber erstellen. (z.B:  field[x][y] = 1)&lt;br /&gt;
Besser wäre vielleicht: Diese überprüft noch einmal die Gültigkeit der Koordinaten x und y, platziert dann im Array field an diesen Koordinaten einen Partikel und dann wird der Partikel auf dem drawPad wie folgt gezeichnet: oder so. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java_Aufgaben]]&lt;/div&gt;</summary>
		<author><name>85.179.156.104</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/DiffusionLimitedAggregation&amp;diff=15853</id>
		<title>Javakurs/Übungsaufgaben/DiffusionLimitedAggregation</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/DiffusionLimitedAggregation&amp;diff=15853"/>
		<updated>2011-03-23T16:40:19Z</updated>

		<summary type="html">&lt;p&gt;85.179.156.104: /* Kommentare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
Als [http://en.wikipedia.org/wiki/Diffusion-limited_aggregation Diffusion Limited Aggregation], kurz DLA, bezeichnet man physikalische Vorgaenge bei denen sich Teilchen durch [[wikipedia:Brownsche Bewegung| Brownsche Bewegung]] zufällig bewegen und bei Kontakt mit anderen Teilchen anlagern. Diese Vorgänge können leicht am Computer simuliert werden und erzeugen sehr schöne Gebilde, die zu der Klasse der [http://de.wikipedia.org/wiki/Fraktal Fraktale] gehören. In dieser Aufgabe soll es darum gehen, eine solche DLA-Simulation zu programmieren.&lt;br /&gt;
&lt;br /&gt;
Eine solches Programm könnte z.B. so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dla.png]]&lt;br /&gt;
&lt;br /&gt;
Lass dich jetzt nicht von der scheinbaren Komplexität des Programms abschrecken! Es ist nicht komplex UND du wirst schrittweise zur Lösung geführt. Am Ende kannst du dann noch ein wenig selbst mit dem Programm experimentieren.&lt;br /&gt;
&lt;br /&gt;
== Die Theorie ==&lt;br /&gt;
Um ein möglichst gleichmäßiges Wachstum des DLA-Fraktals zu erreichen, setzt man in der Mitte des Bildschirms einen Keim und lässt auf einer Kreisbahn (grün) um das Zentrum einen neuen Partikel erscheinen. Diesen Partikel bewegt man zufällig über die Ebene (blaue Bahnen). Entfernt sich der Partikel zu weit vom Zentrum (schwarzer Kreis), so wird er verworfen (rote Bahn) und ein neuer Partikel erzeugt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dla_mechanism.png]]&lt;br /&gt;
&lt;br /&gt;
Die Radien der Kreise sollten mit der Größe des DLA-Fraktals wachsen. Dazu überprüft man bei jeder Anlagerung eines Partikels, ob sich das Fraktal vergrößert hat und ändert gegebenenfalls den Radius. Ein Partikel hat außer seiner Existenz keine weiteren besonderen Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
=== Vorüberlegungen ===&lt;br /&gt;
Soweit so gut. &#039;&#039;&#039;Nun bist du ein wenig gefragt!&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Lies dir die folgenden Fragestellungen durch, und denke darüber nach.&lt;br /&gt;
&lt;br /&gt;
# Die Partikel werden in einer 2-dimensionalen Ebene gespeichert. Welche Datenstruktur aus Java kann man besonders gut verwenden, um viele Partikel abzuspeichern?&lt;br /&gt;
# Wie würde man überprüfen, ob der beobachtete Partikel einen anderen berührt?&lt;br /&gt;
# Wie kann man einen Partikel über die Fläche bewegen? Wie erzeugt man eine [http://en.wikipedia.org/wiki/Brownian_motion Brownsche Bewegung]?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
=== Lösungen ===&lt;br /&gt;
# Ein 2-dimensionales Array von genau der Größe der zu simulierenden Fläche bietet sich an. Als Datentyp würde &#039;&#039;boolean&#039;&#039; genügen, denn wir wollen nur wissen, ob sich an der Position (x,y) ein Partikel befindet oder nicht. Dem Autor ist aber &#039;&#039;int&#039;&#039; sympathischer ;)&amp;lt;br/&amp;gt;&#039;&#039;int[][] field = new int[256][256];&#039;&#039;&lt;br /&gt;
# Jedes der 8 benachbarten Felder um die Position des gerade betrachteten Partikels muss überprüft werden. Ist dort ein Partikel vorhanden, so enthält das Feld einen Wert &amp;gt;0.&lt;br /&gt;
# [http://javadocs.org/Math Math.random()] erzeugt zufällige Zahlen. Mit deren Hilfe kann man über eine Fallunterscheidung die X- und Y-Koordinate des Partikels inkrementieren oder dekrementieren. Dadurch bewegt sich das Teilchen einen Schritt weiter.&lt;br /&gt;
&lt;br /&gt;
== Die Praxis ==&lt;br /&gt;
Da diese Aufgabe ziemlich komplex ist, werden schrittweise alle nötigen Bausteine entwickelt.&lt;br /&gt;
=== Grafik ===&lt;br /&gt;
Zur Grafikdarstellung gibt es die einfach zu bedienende Klasse &amp;quot;Pad&amp;quot;, die ein Fenster erstellt, in dem du mit einfachen Routinen zeichnen kannst.&lt;br /&gt;
&lt;br /&gt;
Falls du noch nicht die ÜBB-Klassen in deinem Javakurs-Verzeichnis hast, lade dir von [http://www.uebb.tu-berlin.de/menue/forschung/buecher/pepper_programmieren_lernen_eine_grundlegende_einfuehrung_mit_java_1_und_2_auflage/ der ÜBB-Seite] die Klassen Pad, Point und Terminal herunter und lege sie in das Verzeichnis ab, in dem auch dein Programm entstehen soll. Wenn du dies getan hast, steht dir die Grafikfunktionalität zur Verfügung. In dieser Aufgabe werden die notwendigen Grafikbefehle vorgeben, du musst dir keine Sorgen machen, dass du dies nicht schaffst.&lt;br /&gt;
&lt;br /&gt;
=== Schritt fuer Schritt ===&lt;br /&gt;
# Erstelle eine Klasse &#039;&#039;DLA&#039;&#039;&lt;br /&gt;
# Füge in der ersten Zeile folgenden import hinzu: &#039;&#039;import java.awt.Color;&#039;&#039;. Was genau dies bedeutet, wird in Vortrag 6 erklärt.&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static int limit(int value, int lower, int upper)&#039;&#039;, die überprüft, ob sich der Wert &#039;&#039;value&#039;&#039; innerhalb der Grenzen &#039;&#039;lower&#039;&#039; und &#039;&#039;upper&#039;&#039; befindet. Ist dies nicht der Fall, soll der Wert auf diesen Bereich beschränkt zurückgegeben werden.&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static boolean testPixel(int[][]field, int x, int y)&#039;&#039;, die überprüft, ob an einem bestimmten Punkt im 2-dimensionalen Array ein Wert &amp;gt;0 vorliegt. Fange dabei ungültige Werte für x und y ab. Benutze dazu die &#039;&#039;limit&#039;&#039; Methode.&lt;br /&gt;
# Teste die &#039;&#039;testPixel(...)&#039;&#039;-Methode!&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static boolean isTouching(int[][] field, int x, int y)&#039;&#039;, die überprüft, ob sich in einem der 8 umliegenden Felder ein Partikel befindet. Benutzte dabei die &#039;&#039;testPixel(...)&#039;&#039; Methode.&lt;br /&gt;
# Teste diese Methode!&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static boolean inRange(int x, int y, int maxR, int maxX, int maxY)&#039;&#039;, die überprüft, ob sich die Koordination &#039;&#039;x&#039;&#039; und &#039;&#039;y&#039;&#039; in einem Rechteck der Seitenlänge &#039;&#039;maxX&#039;&#039; und &#039;&#039;maxY&#039;&#039; innerhalb eines Abstandes &#039;&#039;maxR&#039;&#039; vom Mittelpunkt befindet.&lt;br /&gt;
# Teste diese Methode!&lt;br /&gt;
# Schreibe eine Methode &#039;&#039;public static int moveRandom(int movePixel)&#039;&#039;, die eine Zahl (Koordinatenkomponente) mit &#039;&#039;&#039;gleichen&#039;&#039;&#039; Wahrscheinlichkeiten inkrementiert (+1), unverändert lässt (+/-0) oder erniedrigt (-1).&lt;br /&gt;
# Test kurz diese Methode.&lt;br /&gt;
# Schreibe die Methode &#039;&#039;public static void setPixel(Pad drawPad, int[][]field, int x, int y, Color c)&#039;&#039;. Diese überprüft noch einmal die Gültigkeit der Koordinaten &#039;&#039;x&#039;&#039; und &#039;&#039;y&#039;&#039;, platziert dann im Array &#039;&#039;field&#039;&#039; an diesen Koordinaten einen Partikel und zeichnet den Partikel auf dem &#039;&#039;drawPad&#039;&#039; wie folgt:&lt;br /&gt;
&lt;br /&gt;
 drawPad.setColor(c);&lt;br /&gt;
 drawPad.drawDot(x, y);&lt;br /&gt;
&lt;br /&gt;
Die Klasse Color wird in der Java Dokumentation natürlich erklärt: http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Color.html&lt;br /&gt;
Du kannst mit &#039;&#039;color.black&#039;&#039; auf vordefinierte Farbe zugreifen oder neue Farben über ihre RGB Werte erstellen.&lt;br /&gt;
&lt;br /&gt;
=== Main ===&lt;br /&gt;
Schreibe nun die main-Methode für das DLA-Programm.&lt;br /&gt;
Wenn dir die Struktur des Programms schon klar ist, dann kannst du gern allein versuchen, das Problem zu lösen. Hier sei noch ein Code-Fragment zum Berechnen von Koordinaten auf einem Kreis gegeben:&lt;br /&gt;
&lt;br /&gt;
 //einen Punkt auf einem Kreis um den Mittelpunkt mit dem Radius&lt;br /&gt;
 //maxR+20 erzeugen&lt;br /&gt;
 double x = Math.toRadians(Math.random()*360);&lt;br /&gt;
 int movingPixelX = limit((int)(Math.cos(x)*(maxR+20))+maxX/2, 0, maxX);&lt;br /&gt;
 int movingPixelY = limit((int)(Math.sin(x)*(maxR+20))+maxY/2, 0, maxY);&lt;br /&gt;
&lt;br /&gt;
zusätzlich noch Code um das Grafikfenster zu initialisieren:&lt;br /&gt;
&lt;br /&gt;
 //Fenster fuer Grafikausgabe vorbereiten und anzeigen&lt;br /&gt;
 Pad drawPad = new Pad();&lt;br /&gt;
 drawPad.setBackground(Pad.black);&lt;br /&gt;
 drawPad.setPadSize(maxX, maxY);&lt;br /&gt;
 drawPad.setVisible(true);&lt;br /&gt;
 drawPad.setColor(Pad.white);&lt;br /&gt;
&lt;br /&gt;
Die Klasse Pad bietet ausserdem einige Farbwerte vom Typ &#039;&#039;Color&#039;&#039; an, dir du einfach so benutzen kannst.&lt;br /&gt;
 Pad.white&lt;br /&gt;
 Pad.black&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls dir noch nicht ganz klar ist, wie alles zusammen wirken soll, benutze folgenden Rumpf, der schon die Grafik-Funktionalität und andere Vorgaben enthält:&lt;br /&gt;
&lt;br /&gt;
 import java.awt.Color;&lt;br /&gt;
 &lt;br /&gt;
 class DLA {&lt;br /&gt;
 	public static void main(String[] args) { 		&lt;br /&gt;
 		//Feld fuer Kollisionsueberpruefung erstellen&lt;br /&gt;
 		int[][] field = ...&lt;br /&gt;
 &lt;br /&gt;
 		&lt;br /&gt;
 		//Grenzen fuer Koordinaten der Partikel aus field berechnen (.length verwenden)&lt;br /&gt;
 		int maxX = ...&lt;br /&gt;
 		int maxY = ...&lt;br /&gt;
 &lt;br /&gt;
 		//Fenster fuer Grafikausgabe vorbereiten und anzeigen&lt;br /&gt;
 		Pad drawPad = new Pad();&lt;br /&gt;
 		drawPad.setBackground(Pad.black);&lt;br /&gt;
 		drawPad.setPadSize(maxX, maxY);&lt;br /&gt;
 		drawPad.setVisible(true);&lt;br /&gt;
 		drawPad.setColor(Pad.white);&lt;br /&gt;
 		&lt;br /&gt;
 &lt;br /&gt;
 		//&amp;quot;Samen&amp;quot; erzeugen. Also den ersten Partikel in der Mitte des Feldes setzen (Color: Pad.white)&lt;br /&gt;
 		setPixel(...);&lt;br /&gt;
 		&lt;br /&gt;
 		//Radius des Partikels der am weitesten vom Zentrum entfernt ist&lt;br /&gt;
 		int maxR=0;&lt;br /&gt;
 		&lt;br /&gt;
 		//Schleifenkopf, solange maxR nicht den Rand des Fensters&lt;br /&gt;
 		//beruehrt, sollen neue Punkte gezeichnet werden&lt;br /&gt;
 		while(...) {&lt;br /&gt;
 			//einen Punkt auf einem Kreis um den Mittelpunkt mit dem Radius&lt;br /&gt;
 			//maxR+20 erzeugen&lt;br /&gt;
 			double x = Math.toRadians(Math.random()*360);&lt;br /&gt;
 			int movingPixelX = limit((int)(Math.cos(x)*(maxR+20))+maxX/2, 0, maxX);&lt;br /&gt;
 			int movingPixelY = limit((int)(Math.sin(x)*(maxR+20))+maxY/2, 0, maxY);&lt;br /&gt;
 			&lt;br /&gt;
 			//Schleife zum bewegen des Partikels&lt;br /&gt;
 			//while(!isTouching(...) &amp;amp;&amp;amp; inRange(..., ..., maxR+30, ..., ...))&lt;br /&gt;
 			{&lt;br /&gt;
 				//Partikelkoordinaten zufaellig bewegen (moveRandom)&lt;br /&gt;
 				movingPixelX = ...&lt;br /&gt;
 				movingPixelY = ...&lt;br /&gt;
 			}&lt;br /&gt;
 			&lt;br /&gt;
 			//Schleife zuende, ueberpruefe ob eine Beruehrung vorliegt:&lt;br /&gt;
 			if(isTouching(...)) {&lt;br /&gt;
 				//Farbwertberechnung fuer 1337 blau-Effekt&lt;br /&gt;
 				int k = limit(255-(int)(255*((double)maxR*2)/(double)maxX), 0, 255);&lt;br /&gt;
 				Color c = new Color(k, k, 255);&lt;br /&gt;
 				&lt;br /&gt;
 				//den Partikel setzen und zeichnen&lt;br /&gt;
 				setPixel(...);&lt;br /&gt;
 				&lt;br /&gt;
 				//Radius zum Mittelpunkt berechnen,&lt;br /&gt;
 				//wenn groesser als altes Maximum, ueberschreiben&lt;br /&gt;
 				...&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		 		&lt;br /&gt;
 		return;&lt;br /&gt;
 	}&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Hinweis: Koordinaten im Computer ==&lt;br /&gt;
Am Computer werden Koordination, historisch bedingt, anders behandelt als im rechtwinkligen Koordinatensystem. Koordination im Computer werden von links nach rechts, als X-Achse und &#039;&#039;&#039;von oben nach unten&#039;&#039;&#039; als Y-Achse berechnet. Beachte dies bei der Verwendung von &#039;&#039;drawPad.drawDot(x,y)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 (0,0)-------------------- X&lt;br /&gt;
 |                  (640,0)&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 |&lt;br /&gt;
 | (0,480)          (640,480)&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Als kleine Starthilfe folgt ein Beispiel, wie so ein Kommentar formatiert sein könnte. Mit &amp;quot;Vorschau zeigen&amp;quot; kannst du dir ansehen, was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.&lt;br /&gt;
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Georg ===&lt;br /&gt;
Super Aufgabe :) Macht Spaß die Bilder zu erstellen ;)&lt;br /&gt;
Braucht bei mir aber leider relativ lange, wäre interessant wie man die Simulation maximal beschleunigt. Interessant ist weiterhin das das Bildaufbauen bei mir zu Hause signifikant länger braucht als @TUB.&lt;br /&gt;
&lt;br /&gt;
==== Robert ====&lt;br /&gt;
Na mal schauen, ob irgendjemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.&lt;br /&gt;
&lt;br /&gt;
== Dirks Verbesserungsvorschläge ==&lt;br /&gt;
&lt;br /&gt;
testPixel in isPixel oder isPixelEmpty&lt;br /&gt;
movePixel in movingPixelKoordinate umbenennen&lt;br /&gt;
&lt;br /&gt;
moveRandome in moveKoordinateRandome&lt;br /&gt;
&lt;br /&gt;
== Brandons Kommentar ==&lt;br /&gt;
Die Anweisung für setPixel ist Irreführend. Bei der jetzigen Formulierung geht man davon aus das das Einfügen von &amp;quot;drawPad.setColor(c);&lt;br /&gt;
drawPad.drawDot(x, y);&amp;quot; ausreicht. Dabei muss man das Einfügen des Punktes in das Array selber erstellen. (z.B:  field[x][y] = 1)&lt;br /&gt;
Besser wäre vielleicht: Diese überprüft noch einmal die Gültigkeit der Koordinaten x und y, platziert dann im Array field an diesen Koordinaten einen Partikel und dann wird der Partikel auf dem drawPad wie folgt gezeichnet: oder so. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java_Aufgaben]]&lt;/div&gt;</summary>
		<author><name>85.179.156.104</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=TechGI_1_(Bachelor)&amp;diff=15851</id>
		<title>TechGI 1 (Bachelor)</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=TechGI_1_(Bachelor)&amp;diff=15851"/>
		<updated>2011-03-23T14:29:17Z</updated>

		<summary type="html">&lt;p&gt;85.179.156.104: /* Tipps und nützliche Infos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;klausuren&amp;quot; style=&amp;quot;float:right; width:20%; margin:10px; padding:10px; background-color:#efefef;&amp;quot;&amp;gt;&lt;br /&gt;
=== Klausuren ===&lt;br /&gt;
WS 2008/2009&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TechGI_1/TechGI_1_WS08-09.pdf Klausur]&lt;br /&gt;
WS 2006/2007:&lt;br /&gt;
* [[TechGI_1_Gedächtnisprotokoll_WS0607 | Gedächtnisprotokoll]]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TechGI_1/TechGI_1_altklausur_WS06-07.pdf Klausur]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technische Grundlagen der Informatik 1: Digitale Systeme&#039;&#039;&#039; ist eine Pflichtveranstaltung im ersten Semester des [[Lehrveranstaltungen Informatik|Studiengangs Informatik]] nach neuer [[StuPO Informatik|Bachelor-StuPO]]. Sie besteht aus 2 SWS [[Vorlesung]] und 2 SWS [[Übung]] und entspricht 6 [[ECTS]]-Leistungspunkten.&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tipps und nützliche Infos ==&lt;br /&gt;
http://rt.cs.tu-berlin.de/lehre/techgi/index.html -&amp;gt; link ist tot&lt;br /&gt;
&lt;br /&gt;
== Persönliche Kommentare ==&lt;br /&gt;
- Wollte nur mal anmerken, dass die Alt-Klausuren der TechGI 1(StuPO90) nicht dem neuen Stoff entsprechen. Also nicht wundern.&lt;br /&gt;
Man sollte sich vielleicht die alten Klausuren von Info1 anschauen. Dort sind wenigstens 2 Aufgaben, die etw. Einblick in die Klausur geben können. - ... -&lt;br /&gt;
&lt;br /&gt;
- WS 06/07 Klausurthemen: &#039;Leider ist keine Version im Internet für mich findbar&#039; :&lt;br /&gt;
[[TechGI_1_Gedächtnisprotokoll_WS0607 | Gedächtnisprotokoll]]&lt;br /&gt;
&lt;br /&gt;
ALsooo, in der Klausur wurde , finde ich, schon ein Großteil des Stoffes aufgenommen. Kleiner Kritikpunkt an das VL-Skript: - Ein vollständiges Inhaltsverzeichnis wäre gut :) &amp;lt;br&amp;gt; und manche wirtschaftlichen Aspekte sind interessant, aber teilweise intensiv behandelt,&amp;lt;br&amp;gt; da sie nicht viel mit der Klausur zu tun hatten. -...-&lt;br /&gt;
&lt;br /&gt;
Die Vorlesung ist grundsätzlich Zeitverschwendung. Auch die Tutoren sind teilweise &amp;quot;anstrengend&amp;quot;, weil sie manchmal in einfachem deutsch formulierte Fragen nicht verstehen und als Antwort einfach ihren eben gesagten Satz wiederholen. Trotzdem muss jeder durch dieses Fach hindurch. Und da die meisten Schwierigkeiten mit TechGi haben muss es also Mittel und Wege geben. Meiner war neben meiner Übungsgruppe(die ähnlich planlos war wie ich) in die Sprechstunden der deutsch sprechenden Tutoren zu gehen. Es ist unglaublich wie leicht einzelne Themen eigentlich sind wenn sie gut erklärt werden. Geht auch nicht erst eine Woche vor der Klausur in die Sprechstunden, dann sind die völlig überfüllt und ihr könnt maximal eine Frage stellen und der Tutor ist noch sehr gestresst dazu. &lt;br /&gt;
&lt;br /&gt;
{{EntsprechungD|[[TechGI 1 (StuPO90)]]}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Lehrveranstaltungen]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>85.179.156.104</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=TheGI_1_(Bachelor)&amp;diff=15850</id>
		<title>TheGI 1 (Bachelor)</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=TheGI_1_(Bachelor)&amp;diff=15850"/>
		<updated>2011-03-23T14:27:06Z</updated>

		<summary type="html">&lt;p&gt;85.179.156.104: /* Persönliche Kommentare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;klausuren&amp;quot; style=&amp;quot;float:right; width:20%; margin:10px; padding:10px; background-color:#efefef;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Klausuren&amp;lt;/h2&amp;gt;&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/ws06_beispielklausur.pdf 2006 Beispielklausur]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/ws06_beispielloesung.pdf 2006 Beispielklausur Lösung]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/ws06_beispielalgebra.pdf 2006 Beispielklausur Algebren]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe08_TheGI1_ZK.pdf 2008 Zwischenklausur]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe08_TheGI1_EK.pdf 2008 Endklausur]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe08_TheGI1_ZKN.pdf 2008 Zwischenklausur Nachschreibetermin]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe08_TheGI1_EKN.pdf 2008 Endklausur Nachschreibetermin]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe09_TheGI1_ZK.pdf 2009 Zwischenklausur]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe09_TheGI1_EK.pdf 2009 Endklausur]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe09_TheGI1_EK_Algebren.pdf 2009 Endklausur Algebren]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe09_TheGI1_ZKN.pdf 2009 Zwischenklausur Nachschreibetermin]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe09_TheGI1_EKN.pdf 2009 Endklausur Nachschreibetermin]&lt;br /&gt;
* [http://docs.freitagsrunde.org/Klausuren/TheGI_1_Bachelor/WiSe10_TheGI1_ZK.pdf 2010 Zwischenklausur]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Theoretische Grundlagen der Informatik 1: Grundlagen und algebraische Strukturen&#039;&#039;&#039; ist eine Pflichtveranstaltung im ersten Semester des [[Lehrveranstaltungen Informatik|Studiengangs Informatik]] nach neuer [[StuPO Informatik|Bachelor-StuPO]]. Sie besteht aus 2 SWS [[Vorlesung]] und 2 SWS [[Übung]] und entspricht 6 [[ECTS]]-Leistungspunkten.&lt;br /&gt;
&lt;br /&gt;
Seit Wintersemester 08/09 wird die zuvor in TheGI1 eingebettete Veranstaltung  &amp;quot;[[Informatisches Propädeutikum]]&amp;quot; als unabhängiges Modul angeboten.&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
&lt;br /&gt;
* Beweismathematik&lt;br /&gt;
** Beweistechniken, Beweisnotation&lt;br /&gt;
** Mengen, Relationen , Funktionen&lt;br /&gt;
** Komposition , Abschlussoperatoren&lt;br /&gt;
** Ordnungen, Äquivalenzrelationen&lt;br /&gt;
* Algebraische Strukturen&lt;br /&gt;
** Monoide, Gruppen, Ringe, [Verbände], ...&lt;br /&gt;
** Datenstrukturen, Signaturen, Sigma- Algebren.&lt;br /&gt;
** Kongruenzen, Gleichungen, Quotienten&lt;br /&gt;
** Grundterme, Variablen, Belegungen&lt;br /&gt;
** Homomorphismen&lt;br /&gt;
** Strukturelle Induktion&lt;br /&gt;
* Formale Sprachen&lt;br /&gt;
** Grammatiken und Ableitungen&lt;br /&gt;
** Chomsky-Hierarchie&lt;br /&gt;
** Reguläre Ausdrücke, Kleene-Algebren&lt;br /&gt;
&lt;br /&gt;
== Tipps und nützliche Infos ==&lt;br /&gt;
&lt;br /&gt;
* TheGI 1 deckt nicht den gesamten Stoff des früheren [[TheGI 2 (StuPO90)]], wird dafür aber um einen Teil über formale Sprachen ergänzt.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
&lt;br /&gt;
Für das gesamte Semester und auch für [[TheGI 3 (Bachelor)|TheGI 3]] und [[TheGI 4 (Bachelor)|TheGI 4]] ist das Buch &amp;quot;[http://www.amazon.de/exec/obidos/ASIN/3540419233/thetruth0e Ehrig, Mahr: Mathematisch-strukturelle Grundlagen der Informatik]&amp;quot; (Springer Verlag, ISBN [http://de.wikipedia.org/w/index.php?title=Spezial:Booksources&amp;amp;isbn=3540419233 3-540-41923-3]) praktisch Pflicht.&lt;br /&gt;
&lt;br /&gt;
Das Buch gibt es auch in großer, aber nie ausreichender Stückzahl in der [[Bibliothek]] (Hinweis: Die Bibliothek beschafft auch neue Bücher, wenn der vorhandene Bestand nicht ausreicht. Dafür ist aber manchmal eine freundliche E-Mail nötig). Wenn man an das Buch nicht ran kommt, ist das [http://user.cs.tu-berlin.de/~buchholz/frwiki/skript98.2up.ps Skript von 1998] immerhin besser als nichts. Wer nur die erste Auflage (1999) des Buches bekommen hat, der findet die neuen Kapitel hier: [http://tfs.cs.tu-berlin.de/lehre/SS02/Thegi2/rep.alg.ps 8], [http://tfs.cs.tu-berlin.de/lehre/SS02/Thegi2/alg.spec.ps 11], [http://tfs.cs.tu-berlin.de/lehre/SS02/Thegi2/spec.impl.ps 12].&lt;br /&gt;
&lt;br /&gt;
== Persönliche Kommentare ==&lt;br /&gt;
&lt;br /&gt;
Seit Prof. Nestmann die Vorlesung betreut ist das Buch von Mahr nicht mehr Plicht, aber immernoch eine gute Hilfe! Man sollte sich darauf einstellen das TheGI das schwierigste Fach im ersten Semester wird. Anwesenheit in allen Tutorien ist mehr als sinvoll! [Georg]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{EntsprechungD|[[TheGI 2 (StuPO90)]] (Ja, richtig: Hier gab es eine Drehung)}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Lehrveranstaltungen]]&lt;/div&gt;</summary>
		<author><name>85.179.156.104</name></author>
	</entry>
</feed>