Einstieg in Canvas

In dieser Woche haben wir uns die grundlegenden Canvas-Methoden angesehen.

Zum Einstieg haben wir zuallererst eine einfache Zeichnung auf einem Din A4 Blatt erstellt. Die Eckpunkte dieses Blattes haben wir mit den Koordinaten (0,0),(700,0),(0,500),(700,500) beschriftet, welche später am Computer für Pixel stehen.

Diese Zeichnung sollten wir dann mit Delphi erstellen. Hierbei hat es sich als sinnvoll dargestellt, wenn man schon vorher auf dem Papier alle Eckpunkte innerhalb der Zeichnung mit Koordinaten versehen hatte, um ein Gefühl für die Proportionen zu bekommen. Falls die eigene Papierzeichnung sich nicht zur Darstellung eignete, konnte man stattdessen auch das "Haus vom Nikolaus" erstellen; wer wollte sogar mit Anbau.
Das Programm für die Zeichnung sollte so aussehen, dass die ganze Zeichnung beim Klick auf einen Button "Zeichnen" erstellt wird -> sodass sich also alle folgenden Methoden in diesem Button konzentrierten:

Canvas.pen.color :=clRed //Ändert die Farbe des Stift-Objekts Pen
Canvas.pen.width :=2 //Ändert die Strichstärke des Stift-Objekts Pen
Canvas.moveto (x,y) //Setzt die aktuelle Position auf die Koordinaten (x,y)
Canvas.lineto(x,y) //Zeichnet eine Linie von der aktuellen Position bis zum Punkt (x,y); (x,y) wird die neue aktuelle Position
Canvas.Rectangle(x1,y2,x1,y2) //Zeichnet ein Rechteck mit den gegenüberliegenden Eckpunkten P(x1,y2) und Q(x1,y2)
Canvas.Ellipse(x1,y1,x2,y2) //Zeichnet eine Ellipse innerhalb des imaginären Rechteck mit den Eckpunkten P(x1,y1) und Q(x2,y2); ist dieses ein Quadrat, wird ein Kreis gezeichnet.


Umrechnung von Zahlensystemen (Excel Tabelle)

Ihr könnt mit der Excel Tabelle beliebige Zahlen in andere Zahlensysteme umrechnen.

Die gelbe Spalte kann man jeweils verändern.

 

 

 

 


Einstieg in die Boolesche Algebra

Allgeimeine Funktionen der Booleschen Algebra

Die Boolesche oder auch Aussagenalgebra geht auf den englischen Mathematiker und Philosophen George Boole (1815 - 1864) zurück.

Diese Form der Algebra beschäftigt sich mit mathematischen Aussagen und ihren Verknüpfungen. Dabei gelten Aussagen als mathematisch, wenn sie klar als wahr (w) bzw. falsch (f) zu bezeichnen sind. Wahre Aussagen werden durch einer "1" dagestellt, falsche durch eine "0".

  • Beispiel:
  • Eine mathematische Aussage wäre:
  1. Essen liegt in Nord-Rhein-Westfalen. (wahre Aussage)
  2. Das Maria-Wächtler-Gymnasium hat 10000 Schüler. (falsche Aussage)
  • Dagegen aber keine mathematische Aussage wäre:
  1. Schule ist toll.
  2. Informatik macht Spaß.

Mehrere mathematische Aussagen können mit bestimmten Verknüpfungen verbunden werden. Diese wären:

  1. Und (\land)
  2. Oder (\lor)
  3. Nicht ( \neg )

Sie werden zur Vereinfachung mit den in Klammern stehenden Symbolen dargestellt.

Während \land und \lor zwei Aussagen Verknüpfen bezieht sich \negnur auf eine einzelne Aussage oder das "Ergebnis" mehrer Aussagen.

Dabei wird dieses Ergebnis wie folgt ermittelt:

  • Eine wahre und eine falsche Aussage durch "Und" verknüpft ergeben eine falsche Aussage.
  • Zwei wahre Aussagen durch "Und" verknüpft ergeben eine wahre Aussage.
  • Zwei falsche Aussagen durch "Und" verknüpft ergeben eine falsche Aussage.
  • Beispiele:
  1. Essen liegt in NRW (w) und (\land) das MWG hat 10000 Schüler (f), ist insgesamt eine falsche Aussage.
  2. Deutschland liegt in Europa (w) und (\land) hat eine Grenze zu Österreich (w), ist eine wahre Aussage.
  3. Deutschland liegt nördlich von Schweden (f) und (\land) die Währung sind Franken (f), ist eine falsche Aussage.
  • Eine wahre und eine falsche Aussage durch "Oder" verknüpft, ist eine wahre Aussage.
  • Zwei wahre Aussagen durch "Oder" verknüpft ergeben ebenfalls eine wahre Aussage.
  • Zwei falsche Aussagen durch "Oder" verknüpft bleiben falsch.
  • Beispiele:
  1. Essen liegt in NRW (w) oder (\lor) das MWG hat 10000 Schüler (f), ergben eine wahre Aussage.
  2. Deutschland liegt in Europa (w) oder (\lor) hat eine gemeinsame Grenze zu Österreich (w), ergeben natürlich ebenfalls eine wahre Aussage.
  3. Deutschland liegt nördlich von Schweden (f) oder (\lor) die deutsche Währung sind Franken (f), ergeben eine falsche Aussage.
Sollten mehr als zwei Aussagen verknüpft werden gilt, dass eine durch "Und" verknüpfte Aussagenreihe nur wahr ist, wenn alle Aussagen wahr sind. Sobald also nur eine dieser Aussagen nicht zutrifft ist, das Ergebnis falsch. Bei "Oder" dagegen ist das Ergebnis solange wahr wie eine der Aussagen zutrifft, ist also nur falsch wenn alle Aussagen nicht zutreffen.

  • Eine durch "Nicht" verneinte wahre Aussage wird falsch.
  • Eine druch "Nicht" verneinte falsche Aussage wird wahr.
  • Beispiel:
  1. Essen liegt nicht (\neg) in NRW, wird durch das "Nicht" zu einer falschen Aussage
  2. Das MWG hat nicht (\neg) 10000 Schüler, wird durch das das "Nicht" zu einer wahren Aussage.
Fachbegrifflichkeiten und Rechenregeln der Booleschen Algebra

Die Fach-Bezeichnung für die Nicht-Verknüpfung ist Negation, für die Und-Verknüpfung Konjunktion und für die Oder-Verknüpfung Disjunktion.

Ebenso wie in der Mathematik gelten für diese "Rechenarten" (bzw. Verknüpfungen) bestimmte Regeln:

  • Zuerst werden in Klammern stehende Aussagen zusammen Gefasst bzw. verknüpft.
  • Danach werden die Negationen berücksichtigt.
  • Darauf folgen die Konjunktionen.
  • Zuletzt werden die Disjunktionen verknüpft.
  • Beispiel:


A

(Aussage1)

B

(Aussage2)

C

(Aussage3)

(A\lor B) \land (\neg C \lor C)

A\lorB

\negC \lor C

 

1

1

1

1

1

1

1

1

0

1

1

1

1

0

1

1

1

1

1

0

0

1

1

1

0

1

1

1

1

1

0

1

0

1

1

1

0

0

1

0

0

1

0

0

0

0

0

1


Die ersten drei Spalten geben alle möglichen Variationen von wahren und falschen Aussagen bei drei Aussagen an. In der Vierten steht dann die "Rechnung" die mit den Aussagen ausgeführt werden muss und in Spalte 5 und 6 wie man diese "Rechnung" korrekt Zerlegen würde um die beiden Ergebnise schließlich mit einer Konjunktion zu verknüpfen.

Bestimmte Gesetzmäßigkeiten entsprechen in diesem Zweig der Algebra der Mathematik, wie das Komutativ- und das Assoziativgesetz. Im Folgenden werden die im Unterricht bereits erschlossenen Gesetze aufgeführt, da allerdings viele andere ebenfalls wichtig für die Boolesche Algebra gibt es an dieser Stelle ein Verweiß zu den unten aufgeführten Links.

Kommutativgesetz:

  • a\land b = b\land a und a\lor b = b\lor a
Assoziativgesetz:
  • (a\land b)\land c = a\land (b\land c) und (a\lor b)\lor c = a\lor (b\lor c)

Komplementärgesetz:

  • a\land\neg a=0 und a\lor\neg a=1


Weiterfürhrende Links:

http://de.wikipedia.org/wiki/Boolesche_Algebra

http://de.wikipedia.org/wiki/George_Boole

Quelle:

  • Eigene Informatik Unterlagen
  • wikipedia.de

Bearbeitet von:

Jonatan B.

Lampenspiele erstellen mit der random-Funktion, Prozeduren, Arrays und Variablen

Die Woche im Überblick:
Wir haben mit einem neuen Projekt begonnen: das Lampenspiel.
Ziel des Spiels ist es, alle Felder in einer Farbe zu bekommen.
Wir haben insgesamt 2 Versionen.

Version 1:
Man hat 7 Felder im Kreis angeordnet. Beim Klicken auf einem Feld wird die Farbe des Feldes und der umliegenden Felder umgekehrt.
Version 2: Man hat 4*4 Felder, also insgesamt 16 Felder. Beim Klicken auf einem Feld wird die Farbe des Feldes und die Felder mit der Position (relativ zum geklicktem Feld) -4, -1, +1 und +4 umgekehrt.
Beim Ausführen des Programms wird verständlich, was gemeint ist.

In dieser Woche gab es eine Menge an Theorie. Wir hatten einmal die random-Funktion und einen "Crash-Kurs" in Sachen Prozeduren, Arrays und Variablen.

Die random-Funktion:

Die random-Funktion ist vom Typ Integer (Zahlen, wie z.B. 0,1,2,...). Es werden "Zufallszahlen" aus gegeben, aber nicht irgendwelche. Man grenzt die Zahlen durch eine Zahl in der Klammer hinter dem random ein. Ein Beispiel: random(2). Die 2 bedeutet das die random 2 Möglichkeiten stellt, entweder gibt sie 0 oder 1 aus.

Wichtig ist das man die random-Funktion zuvor mit randomize; einleiten muss. Dies ist nur einmal am Anfang notwendig. So wird der Funktion gesagt, dass es den "Zufallsgenerator" einschalten soll.

Für unser kleines Programm mussten wir die random-Funktion in einer Bedingung einbauen. Beispiel:
if random(2) = 1
then .....
Die random-Funktion gibt ja 0 oder 1 aus, und wenn 1 ausgegeben wird ist diese Bedingung true. Es wird then ausgeführt.

Prozeduren:

Prozeduren werden mit procedure eingeleitet. Diese sind gefolgt vom Formulartyp, einem Punkt ("."), dem Namen der Methode und in Klammern die Parameter. Hinter der letzten Klammer muss ein Semikolon(";") gesetzt werden. In der neuen Zeile steht das begin, dass den Anfang der Anweisungen angibt, die ausgeführt werden sollen. Beendet werden Prozeduren mit einem end;. Unser Beispiel:
procedure TForm1.FarbeWechseln (LampenNr: Integer)

Die Prozedur muss auch im Kopf der Unit stehen, und zwar unter public, wo unsere eigenen Deklarationen eingefügt werden und das ganze Programm darauf Zugriff hat und unter implementation, wo unsere ganze Prozedur inklusiv Code steht.

Wenn man dies gemacht hat kann man dann beliebig oft auf diese Prozedur zugreifen und uns lästige Schreib- und Kopierarbeit sparen.

Das Array:

Ein Array ist ein Feld für einen Datentyp, indem man beliebig viele Daten speichern kann. Man kann sich ein Array wie einen Schrank mit Schubladen vorstellen. Man kann in jeder Schublade etwas abstellen.

Man deklariert Arrays unter var, wo der Typ einer Variable definiert wird.
Auch hier wieder ein Beispiel:
a: array [1..16] of TPanel;

Nun ist a ein Array mit 16 "Schubladen. In diesem Array dürfen nur Panelobjekte gespeichert werden, da wir dem Array den Datentyp TPanel zuweisen. Wichtig sind die Punkte innerhalb der eckigen Klammern. Es dürfen nur 2 sein, da sonst ein Fehler ausgelöst wird. Der Doppelpunkt(":") hinter dem a bedeutet "ist vom Typ".
Man könnte es also ungefähr so lesen:
a ist vom Typ array mit den Fächern 1 bis 16 in dem nur Panelobjekte gespeichert werden dürfen.

Man greift auf einem Fach im Array mit [Zahl] zu und weist es bei uns einem Panel durch ":=" zu. Unser Beispiel:
a[1] := Panel1;

Wie haben nun dem ersten Fach des Array ein Panelobjekt zugewiesen.

Zum besseren Verständnis stehen beide Lampenspiele im Anhang zur Verfügung.

Ich denke, dass damit die wichtigsten Sachen genannt worden sind, die in dieser theoriereichen Woche vorkam. Bei Fragen einfach Kommentar schreiben.

Alex M.


Hexadezimalsystem

Wochenbericht ( vom27.08.07 bis zum 31.08.07)

 

Dual- ins Dezimalsystem

Anfängliches Problem: Eine große Dualzahl, wie z.B. 1100111110101 ins Dezimalsystem umzurechnen

Dieses System hatten wir in der Stunde am Dienstag den 28.08.2007 entwickelt um vorallem lange Dualzahlen umzurechnen. Das System funtioniert wie folgt:

  1. Man nimmt die erste Ziffer der Zahl im Dualsystem und multpilizert diese mit 2Anzahl der Ziffern im Dualsystem -1
  2. Dieses addiert man dann mit der zweiten Stelle der Ziffer im Dualsystem, multipliziert mit
    2Potenz der vorherigen Zahl -1
  3. Dies wiederholt man dann bis die Potenz an der 2, 0 beträgt, führt diesen Rechenschritt dann noch aus, und beendet dann diese Aufzählung
  4. Die Rechnung muss man dann nur noch, am besten mit Hilfe eines Taschenrechner, ausrechnen

Hier ein Beispiel zur Verdeutlichung:

$  1011_2  $ wird zu $  1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 1 \cdot 2^0  $, also $  11_{10}  $


Rund ums Hexadezimalsystem


Diese 16er Potenzen benötigt man um vom Hexadezimalsystem ins Dezimalsystem umzurechnen

$ 16^0 =1 $
$ 16^1 =16 $
$ 16^2 =256 $
$ 16^3 =4096 $
$ 16^4 =65536 $
...
Dies wird bei der Umrechnung vom Dezimalsystem ins Hexadezimalsystem benötigt (siehe weiter unten)

Hexadezimalsystem-Wertetabelle

(Bildquelle: Wikipedia )

Dieses System hat den Vorteil, dass man um eine größere Zahl darzustellen, weniger Zeichen benötigt.


Hexadezimalsystem -> Dezimalsystem

Das System funtioniert wie folgt:

  1. Man nimmt die erste Ziffer der Zahl im Hexadezimalsystem und multpilizert diese mit 16Anzahl der Ziffern im Hexadezimalsystems -1
  2. Dieses addiert man dann mit der zweiten Stelle der Ziffer im Hexadezimahlsystem, multipliziert mit 16Potenz der vorherigen Zahl -1
  3. Dies
    wiederholt man dann bis die Potenz an der 16, 0 beträgt, führt diesen
    Rechenschritt dann noch aus, und beendet dann diese Aufzählung
  4. Die Rechnung muss man dann nur noch, am besten mit Hilfe eines Taschenrechner, ausrechnen

Hier ein Beispiel zur Verdeutlichung:

$ D7F_{16}=13 \cdot 16^2 + 7 \cdot 16^1 + 15 \cdot 16^0 = 3455_{10} $


 

Dezimalsystem -> Hexadezimalsystem

Beim Umrechnen einer Zahl aus dem Dezimalsystem ins Hexadezimahlsystem muss man wieder mit dem Restwertalgorithmus arbeiten. Dabei führe folgende Schritte durch:

  1. Die Dezimalzahl wird zum Zähler und 16 wird zum Nenner des Bruchs. Im Untem angegebenen Beispiel ergibt dies wenn man es in den Taschenrechner eingibt: 215 15/16. Diese 15/16 notiert man sich als Rest neben den 215.
  2. Diese 215 werden wieder zum Zähler und 16 wieder zum Nenner des Bruches. Gibt man dieses erneut in den Taschenrechner ein, erhält man 13 7/16. Diese 7/16 notiert man sich als Rest neben der 13.
  3. Dies wiederholt man, bis 0 Rest: irgendwas, in diesem Falle 3/16, rauskommt. Man notiert sich dies wie oben bereits immerwieder angesprochen.
  4. Man streicht die Nenner wieder weg.
  5. Die nun als unterste im Rest stehende Zahl, ist die erste Ziffer: Diese notiert man sich am besten.
  6. Nun nimmt man die zweite Zahl von unten und notiert diese rechts neben der anderen ( natürlich deutlich, vlt. durch ein Komma, voneinander abgetrennt). Dies macht man mit allen Resten.
  7. Jetzt schaut man in der Hexadezimahl- Wertetabelle (siehe oben) nach und schreibt die entschprechenden Buchstaben oder Zahlen hintereinander wieder auf, diesmal nur mit Abstand voneinander getrennt. Dies macht man natürlich für alle errechneten Reste.
  8. Nun hat man das Ergebnis.

 

Hier ein Beispiel zur Verdeutlichung:


Wieder
Restwertalgorithmus:
$ 3455/16= 215 $ Rest: $  15/16  $ ( also $ F_{16} $)
$ 215/16  = 13 $ Rest: $  7/16  $
$ 13/16    = 0 $ Rest: $  13/16  $ (also $ D_{16} $)
--> wegstreichen der Nenner bei den Resten
$ \rightarrow 3455_{10}=D7F $


Erarbeitet von Tim R., am 01.09.2007

Weiterführende Links:

Inhalt abgleichen