Samstag, 22. Oktober 2016

11/1 Inf Felder Überblick

Was sind Felder?

  • statische Speicherstruktur
  • Bestehen aus Elementen (nummeriert von 0 bis x)
  • In jedem Element befindet sich ein Verweis (ein "Link") auf ein bestimmtes Objekt
  • Ist kein Objekt in einem Element gespeichert, verweist es auf "null" (Nichts)
Ein Feld erzeugen (in BlueJ)

1. Globale Variable implementieren (-> eine Variable eines bestimmten Datentyps, die in jeder Methode der Klasse verwendet werden kann, wird "erzeugt")

private int[]feld;
private Datentyp[] Bezeichner;

2. Größe des Feldes (=Anzahl der Elemente) im Konstruktor deklarieren (-> der Variable wird im Konstruktor, der Methode, die ein Objekt der Klasse erzeugt, ein bestimmter Wert zugeordnet)

public Feld()
{
   feld = new int[10];
}
public Klassenname()
{
     Bezeichner = new Datentyp[Anzahl der Elemente];
}

Mit Feldern arbeiten(in BlueJ)

Ein Feld "per Hand" füllen (-> bestimmten Elementen werden bestimmte Werte zugeordnet)

public void feldFüllen()
{
   feld[0] = 1;
   feld[1] = 1;
   feld[2] = 2;
}
public Rückgabedatentyp Methodenname()
{
    Bezeichner[Nummer des Elements] = Objekt/Zahl/Text;
}

Ein Feld mithilfe einer for-Schleife füllen (-> einer Reihe von Elementen werden bestimmte Werte zugeordnet)

public void feldFüllen()
{
   for(int i; i<feld.length; i++)
   {
      feld[i] = i;
   }
}
public Datentyp Methodenname()
{
    for(int i; Bedingung; i++)
    {
        Bezeichner[i] = Objekt/Zahl/Text;
    }
}

// Beispiel oben: alle Elemente (egal wie viele) werden mit der Zahl, die der Nummer des Elements entspricht, gefüllt. Bezeichner.length gibt automatisch die Länge des Feldes zurück. Mithilfe der Bedingung kann man aber auch nur die ersten zwei oder die Hälfte der Elemente etc. füllen.

Weitere Methoden als Beispiel:


public int auslesen(int elem)

{
  if(elem <= feld.length)
  {
    System.out.println("Im Element mit Nummer     " + elem + " steht " + feld[elem] + ".");
  }
  else
  {
    System.out.println("Das eingegebene Feld     existiert nicht.");
  }
  return feld[elem];

// die Methode gibt am Bildschirm den Wert (feld[elem]) des eingegebenen Elements (elem) aus (hier eine Zahl).

public void elementeVertauschen(int elem1, int elem2)
{
  int ergebnis1 = feld[elem1];
  int ergebnis2 = feld[elem2];
  feld[elem1] = ergebnis2;
  feld[elem2] = ergebnis1;
}

// die eingegebenen Elemente elem1 und elem2 werden vertauscht, d.h. was vorher in elem1 stand, ist nun in elem2 und umgekehrt. Da die Werte überschrieben werden, muss man die Werte "zwischenspeichern" (in ergebnis1 und ergebnis2).

Ich hoffe, das verschafft euch einen kleinen Überblick über Felder als Speicherstruktur. Ich habe diesen Post geschrieben, weil ich bald eine Kurzarbeit über das Thema schreibe und mir so noch einmal alles ins Gedächtnis rufen kann.
Fragen/Wünsche für den nächsten Post bitte in die Kommentare, ihr braucht dazu keinen Account ;)

Donnerstag, 20. Oktober 2016

11/1 Deu Analyse dramaturgischer Mittel

Jede Dramenanalyse besteht aus dramaturgischen Mitteln. Diese werden benutzt, damit bei der Umsetzung des Textes in ein Theaterstück die Schauspieler und der Regiesseur wissen, wie der Autor des Dramas, der ja nur Dialoge aufschreibt, sich die Art und weise, wie die Personen miteinander interagieren, vorgestellt hat.
Zu den Dramaturgischen Mitteln gehören:

  • Regieanweisungen
  • Hervorhebungen der Wörter (etwa durch Fettdruck, Kursivdruck, L e e r z e i c h e n zwischen den Buchstaben)
  • Auffällige Satzzeichen (etwa viele Ausrufe- oder Fragezeichen, "..." etc.)
Erst einmal widmen wir uns den Regieanweisungen

Es lohnt sich natürlich immer, sich Notizen zu machen, bevor man einen Fließtext verfasst. Dabei müssen auf jeden Fall folgende 3 Teile beachtet werden (egal in welcher Reihenfolge):

1. Zitieren oder Verweisen auf die ausgewählte Regieanweisung (eine möglichst wichtige und ausschlaggebende)
2. Einordnen derselben in den Kontext und Erklärung
3. Deutung/Interpretation der Regieanweisung


Als Beispiel wähle ich einen Auszug aus 'Maria Stuart' von Friedrich von Schiller (3.Aufzug, 4.Auftritt, V.2419 - V.2424):

ELISABETH (höhnisch lachend). Jetzt zeigt Ihr Euer wahres Gesicht, bis jetzt war's nur die Larve.                       
MARIA (von Zorn glühend, doch mit einer edlen Würde)
Ich habe menschlich, jugendlich gefehlt,
Die Macht verführte mich, ich hab es nicht                         Verheimlicht und verborgen, falschen Schein
Hab ich verschmäht, mit königlichem Freimut. [...]

 Als sich beide Königinnen zum ersten Mal gegenüberstehen entbrennt ein Machtkampf, der auch durch die Regieanweisungen verdeutlicht wird. Obwohl Elisabeth Marias Überredungsversuchen subtil und kaltherzig gegenüber tritt, verliert auch sie in den Versen 2419 und 2420 kurz die Fassung, als sie Maria "höhnisch lachend" kontert. Hier merkt man deutlich, dass Elisabeth Schadenfreude empfindet und über ihre Gegnerin triumphiert. Darauf begegnet diese ihr "von Zorn glühend, doch mit einer edlen Würde", wie die Regieanweisung nach dem Vers 2420 besagt. Daraus lässt sich schließen, dass die Königin von England Marias wunden Punkt getroffen hat, die nun zwanghaft versucht, ihre Emotionen zu unterdrücken und mit der Ruhe einer Königin zu sprechen.

Versucht auf jeden Fall, Wortwiederholungen zu vermeiden und die drei Punkte sinnvoll zu verknüpfen. Baut auch unterschiedliche Methoden, zu Zitieren, ein um den Text abwechlungsreicher und niveauvoller zu gestalten. Schweift jedoch nicht zu weit ab, damit der Text nicht zu lang wird und/oder Aussagen aus der Inhaltsangabe oder anderen Teilen der Dramenanalyse zu oft wiederholt.

Mittwoch, 19. Oktober 2016

11/1 Inf 0. Einstieg ins Programmieren

Blöd, dass ich jetzt erst einsteige, denn in 11/1 geht es mit dem Programmieren aus der 10. weiter. Hier möchte ich aber auf die am häufigsten auftretenden Schwachstellen der Schüler (die sogenannten Hä?-Punkte) eingehen. Ich gehe gern auf grundlegende Fragen aus den Kommentaren ein und beantworte sie.
Vorweg noch eine Information: ich programmiere in objektorientiertem System in Java

1. komplizierte Struktur / Syntax
Wer sich vor dem Programmieren mit Excel befasst hat, hat es wesentlich leichter, die Methoden zu verstehen, da sie im wesentlichen Gemeinsamkeiten aufweisen.
Beispiel: Verschachtelung von Funktionen wie SUMME / if
Außerdem kann es helfen, sich mit Datenbanken auseinanderzusetzen, denn diese weisen deutlich mehr Ähnlichkeit auf, zumal SQL (z.B. bei Open Office Datenbank) auch eine einfache Programmiersprache ist.
Beispiel: Funktionieren der Methoden Where / Having und if bzw. Benutzen von Rechen- oder Verbindungszeichen wie &,/

2. Denken wie ein Computer
Das ist, was viele so schwierig finden: Verstehen wie Methoden funktioneren und wie man sie anwenden muss. Dabei ist es ganz einfach. Natürlich muss man zuerst lernen, wofür die verschiedenen Methoden da sind und wie man sie schreibt. Und dann muss man sich zuerst in gewöhnlicher Sprache eine Lösung für ein Problem ausdenken. Erst dann kann man den Algorithmus in Computersprache übersetzen.
Beispiel: Realisiere das hinzufügen eines Menschen in eine Warteschlange (Feld mit Größe 3).
Überlegung: Man muss in das nächste freie Element des Feldes den gewünschten Menschen einfügen.
Programmierung: 
private Feld[] warteschlange; // Initialisierung eines Feldes
private int anzahlMenschen; // variable zeigt an, wie viele Menschen in der Warteschlange stehen
public Warteschlange() // Konstruktor
{
   warteschlange = new Feld[3]; // Feld bekommt drei Elemente: 0,1 und 2
   anzahlMenschen = 1; // von Anfang an ist ein Mensch in der Schlange

public void einfügen(Mensch m) // gewünschte Methode
{
   if(warteschlange.length<anzahlMenschen) // prüft, ob noch ein Mensch ins Feld passt
   {
       warteschlange[anzahlMenschen] = m; // wenn ja, wird an der Stelle nach den Menschen, die schon in der Schlange sind, der Mensch eingefügt
       anzahlMenschen++; // die Anzahl der Menschen in der Schlange erhöht sich um 1, da ein Mensch hinzugefügt wurde
   }
}

Das größte Problem, das ich beobachtet habe, ist, sich zu überlegen, wie der Algorithmus aussehen soll, um das Problem zu lösen und weniger die Programmierung. Hier kann ich nur raten: versucht, bereits vorhandene, richtige Codes zu verstehen und programmiert selbst etwas oder erweitert die Methoden aus dem Unterricht, wie ihr es wollt.

3. Allgemeingültige Programmierung
Es ist oft schwierig, Algorithmen allgemeingültig zu programmieren. Hier kann ich nur eines raten: zuerst spezifisch zu programmieren, um sich den Ablauf und die Funktionsweise klar zu machen, und dann den Algorithmus mit Variablen allgemeingültiger machen.
Beispiel: Realisiere das Aufrücken der Objekte im Feld der Warteschlange, wenn das erste Element null ist.
spezifisch:
warteschlange[1] = warteschlange[0]; // das Objekt auf 'Platz' 1 wird auf 'Platz' 0 kopiert
warteschlange[2] = warteschlange[1]; // das Objekt auf 'Platz' 2 wird über das Objekt auf 'Platz' 1 kopiert

Das muss jetzt so lange wiederholt werden, bis das letzte Element eins nach vorne 'geschoben' wurde.
allgemein:
for(int i=0; i<warteschlange.length; i++) // die for-Schleife ermöglicht bei variabler Feldlänge das Wiederholen bis zum Ende des Feldes
{
   warteschlange[i+1]=warteschlange[i];
}

Hierbei ist abstraktes, logisches Denken notwendig.
Fragen und Wünsche bitte in die Kommentare! :)