Bitte gib die Ergebnisse deiner Aufzeichnungen zum Video von David Kriesel hier ein:
16.05.2023
Hausaufgabe zur nächsten Sitzung:
Wieviele Befehle (oder Operationen) benötigt man, um aus einer Menge von 15 Leuten die größte Person herauszufinden? Wieviele Operationen benötigt man, um aus einer Menge von n Elementen das größte Element herauszufinden?
09.05.2023
04.05.2023
Hausaufgabe für die nächste Stunde: Lies folgenden Artikel:
Hausaufgabe zum nächsten Mal:
Löse die Aufgabe 4 aus der oben verlinkten Zusammenfassung und gib die Lösung direkt in das Rückmeldeformular ein:
Zur Diskussion im Unterricht in der nächsten Stunde
Ideen für nicht allzu komplizierte Algorithmen:
• Eingabe: Array von Zahlen | Ausgabe: Mittelwert
• Eingabe: Array von Zahlen | Ausgabe: "moving average": Mittelwert aus benachbarten Werten um eine Zahlenfolge zu "glätten"
• Eingabe: Array von Zahlen | Ausgabe: Maximales oder minimales Element
• Eingabe: Array von Zahlen | Ausgabe: Spannweite
• Eingabe: Array von Zahlen | Ausgabe: Rotiere das gesamte Array
• Eingabe: Array von Zahlen, idx1, idx2 | Ausgabe: Rotiere das Array innerhalb der Indizes idx1 und idx2
• Eingabe: Zahl | Ausgabe: ist Primzahl?
• Eingabe: zahl1, zahl2 | Ausgabe: ggT oder kgV
• Eingabe: zahl | Ausgabe: Primfaktorzerlegung
• Eingabe: Wort | Ausgabe: istPalindrom?
• Eingabe: Wort aus Ziffern | Ausgabe: Addition mit der Zahl eins (für riesige Zahlen, die nicht als int oder long darstellbar sind) - ggf. auch Addition mit zweiter Zahl, oder Multiplikation oder Division
• Eingabe: Lineare Funktion (also Steigung m und y-AA b) | Ausgabe: Nullstelle
14.04.2023
Klausurthema: Programmierung in Java, Objektorientierung, Sortierverfahren
1. Grundlagen
• Variablen, Wertzuweisungen, Variablentypen (int, boolean, double, ... )
• if-Anweisungen und Bedingungen incl. else-Block
• for-Schleife
• Handhabung von Strings (Zeichenketten)
• Handhabung von Arrays
• Funktionen: Eingabeparameter ("Argumente") und Rückgabewerte
• Korrektes Einrücken von Programmen
• Ausgabe von Programmen angeben können (wie in der letzten Klausur)
2. Objektorientierte Programmierung
• Sichere Unterscheidung von Klasse, Objekt, Eigenschaft und Methode, Konstruktor
• Bedeutung der unterschiedlichen Schlüsselwörter: class, new, void, null
• Unterscheidung der atomaren Datentypen (int, boolean, ...) von Referenztypen
• Funktionsweise von Referenztypen (wie z.B. JButton aber auch eigene Klassen wie BemanntesRaumschiff)
• Vererbung
• Schnittstellen (Interfaces)
• Verständnis unserer Modellprojekte: "WasserMitTemp", "SpaceDing", "Feueralarm"
• Verständnis des Skriptes 20220114_TOE_Java_Einfuehrung.pdf mit Ausnahme der Seiten 21, 22 (Vererbung), 23 (char und String), 24 (Java außerhalb von BlueJ). Die Seite 25 ist aber wieder hilfreich.
3. Sortierverfahren
• Bubblesort: Idee erklären können, Programmcode verstehen und Fehler finden können
• Gegebenen Bubblesort für atomare Datentypen auf z.B. Objekte vom Typ HighscoreEintrag umschreiben können.
Übungsmaterial:
Alle Seiten des Skriptes. Dabei haben wir manche Details intensiver im Unterricht besprochen als andere. Aber (fast) alle Dinge sind im Unterricht bereits vorgekommen. Ein Durcharbeiten (und Verständnis) des Skriptes ist gut investierte Zeit. Hier das Skript: 20230414_TOE_Java_Einfuehrung.pdf
Was bedeutet "extends"?
• "extends JButton" signalisiert, dass wir die Klasse JButton um eine Funktionalität erweitern möchten, wobei wir alle Funktionen von JButton aber beibehalten möchten. Die Klasse MyToggleButton erbt alle öffentlichen Eigenschaften und Methoden von JButton.
• Man sagt: JButton ist die Oberklasse, MyToggleButton ist die Unterklasse.
Was bedeutet "super()"?
• Bei Vererbung werden die Konstruktoren nicht mit vererbt.
• Man möchte trotzdem Methoden aus der Oberklasse aufrufen. Mit super() kann man im Konstruktor von MyToggleButton den Konstruktor der Oberklasse aufrufen.
Was bedeutet "super.paintComponent()"?
• paintComponent ist eine Methode (sowohl unserer Klasse MyToggleButton als auch von JButton).
• Die Methode der Superklasse rufen wir mit super.paintComponent() auf.
Was bedeutet "implements ActionListener" und "addActionListener"?
• "implements" ist wie ein Versprechen, dass wir bestimmte Methoden in der Klasse schreiben (in diesem Fall die Methode actionPerformed())
• die Methode actionPerformed wird immer dann aufgerufen, wenn eine Aktion ausgeführt wurde (z.B. ein Button wurde gedrückt). Dass passiert aber nur dann, wenn man diese Funktionalität mit "addActionListener" angemeldet hat.
• Wenn also actionPerformed aufgerufen wurde, soll der Status "isBlack" umgekehrt werden.
Was bedeutet "this.getWidth()"?
• getWidth() ist eine Methode der Klasse JButton, welche die Breite des JButtons zurückgibt. Mit this wird das Objekt bezeichnet, in dessen Kontext ich mich gerade befinde.
Was bedeutet "g.fillRect(....)"?
• fillRect füllt ein Rechteck (in unserem Fall unser kleines Quadrat) mit der voreingestellten Farbe.
• g ist ein Objekt, welches ähnlich einer Leinwand funktioniert. Auf diese Leinwand zeichnen wir unser kleines Quadrat. Immer dann, wenn der Button neu gezeichnet wird (z.B. weil ein darüberliegendes Fenster weggezogen wurde), wird auch unser kleines Quadrat neu gezeichnet.
Woher weiß Java, dass "red" rot ist? Gibt es andere Möglichkeiten für Farbfestlegungen?
• siehe Klasse "Color" von Java
Was bedeuten die import-Anweisungen?
• Mit import signalisiert man, dass man bestimmte Pakete nutzen möchte, die bei Java eingebaut sind. Beispielsweise muss man, um die Klasse JButton nutzen zu können, das Paket "javax.swing" einbinden.
09.11.2022
Ein kleines Java-Skript für den Unterricht: 20211203_TOE_Java_Einfuehrung.pdf
Hausaufgabe für kommenden Dienstag: Lies das Skript bis Seite 12 (Klassen und Objekte) und notiere dir Fragen zum Inhalt.
25.10.2022
Klausur am 2.11.2022:
Thema: Grundlagen der Informatik und Programmierung in Java
• Einfache Zahlumwandlungen und Zählen in Dezimal / Hexadezimal /Binär
• Caesar-Verschlüsselung verstehen und anwenden können.
• Modulo-Operator % verstehen
• Verstehen was (kleine) Programme tun und Ausgaben vorhersagen (siehe Beispiele weiter unten oder unseren kleinen Test)
• Idee "Programmausführung auf Papier" vom 22.09.2022 durchführen können
• Kleine Programmschnipsel selbst schreiben können (z.B. alle Quadratzahlen unter einer festgelegten Grenze ausgeben oder eine Zeichenkette in umgekehrter Reihenfolge ausgeben)
Bei dem untenstehenden Beispielprogramm wurden drei Programmschnipsel ergänzt (Quadratzahlen und Zeichenkette umgekehrt und Caesar-Verschlüsselung).
Betrachte folgenden Programmcode:
public class Nonsens {
public static void main() {
System.out.println("Ausgabe von a():");
a();
System.out.println("----------------");
System.out.println("Ausgabe von b():");
b();
System.out.println("----------------");
System.out.println("Ausgabe von c():");
c();
System.out.println("----------------");
System.out.println("Ausgabe von d():");
d();
System.out.println("----------------");
System.out.println("Ausgabe von e():");
e();
System.out.println("----------------");
System.out.println("Ausgabe von f():");
f();
System.out.println("----------------");
System.out.println("Ausgabe von g():");
g();
}
public static void a() {
int z_wert = 2;
for(int i = 0; i < 5; i++) {
z_wert = z_wert + 1;
System.out.println("Z-Wert lautet: "+z_wert);
}
}
public static void b() {
int z_wert = 2;
for(int i = 0; i < 5; i++) {
z_wert = z_wert + i;
System.out.println("Z-Wert lautet: "+z_wert);
}
}
public static void c() {
int z_wert = 2;
for(int i = 0; i < 5; i++) {
z_wert = z_wert + i;
if(i > 2) {
z_wert = z_wert - 1;
}
System.out.println("Z-Wert lautet: "+z_wert);
}
}
public static void d() {
String s = "abcde";
int z_wert = 2;
String e = "";
for(int i = 0; i < s.length(); i++) {
z_wert = (6*z_wert + 2)%s.length();
e = e + s.charAt(z_wert);
System.out.println("e lautet: "+e);
}
}
// Eine Zeichenkette rückwärts ausgeben
public static void e() {
String eingabe = "kamel";
for(int i = 0; i < eingabe.length(); i++) {
int index = eingabe.length() - i - 1; // von hinten zählen!
char b = eingabe.charAt(index);
System.out.println("Buchstabe lautet: "+b);
}
}
// Quadratzahlen unter einer bestimmten Grenze
public static void f() {
int grenze = 123; // die Methode soll bei Änderung der Grenze
// trotzdem noch funktionieren!
System.out.println("Die Quadratzahlen kleiner als "+grenze+" lauten:");
for(int i = 1; i < grenze; i++) {
int quadratzahl = i * i;
if(quadratzahl <= grenze) {
System.out.println("Quadratzahl lautet: "+quadratzahl);
}
}
// Hinweis: dieses Miniprogramm lässt sich noch wesentlich
// eleganter schreiben - aber das lernen wir später.
}
// Caesar-Verschlüsselung
public static void g() {
String eingabe = "hallo"; // frei wählbar
int summand = 2; // frei wählbar (0-25)
System.out.println("Verschlüsselung von "+eingabe);
System.out.println("Mit Verschiebungssummand: "+summand);
String geheimtext = "";
String abc = "abcdefghijklmnopqrstuvwxyz";
String abc2 = abc + abc; // zwei mal hintereinander
for(int i = 0; i < eingabe.length(); i++) {
char buchstabe = eingabe.charAt(i);
int pos = abc2.indexOf(buchstabe); // Position innerhalb des abc
int posNeu = pos + summand; // neue Position
char buchstabeNeu = abc2.charAt(posNeu); // neuer Buchstabe
geheimtext = geheimtext + buchstabeNeu;
}
System.out.println("Verschlüsselt: "+geheimtext);
}
}
Du solltest in der Lage sein, die Ausgaben der jeweiligen Methoden komplett vorherzusagen! Hier sind die Ausgaben zur Überprüfung abgedruckt:
Ausgabe von a():
Z-Wert lautet: 3
Z-Wert lautet: 4
Z-Wert lautet: 5
Z-Wert lautet: 6
Z-Wert lautet: 7
----------------
Ausgabe von b():
Z-Wert lautet: 2
Z-Wert lautet: 3
Z-Wert lautet: 5
Z-Wert lautet: 8
Z-Wert lautet: 12
----------------
Ausgabe von c():
Z-Wert lautet: 2
Z-Wert lautet: 3
Z-Wert lautet: 5
Z-Wert lautet: 7
Z-Wert lautet: 10
----------------
Ausgabe von d():
e lautet: e
e lautet: eb
e lautet: ebd
e lautet: ebda
e lautet: ebdac
----------------
Ausgabe von e():
Buchstabe lautet: l
Buchstabe lautet: e
Buchstabe lautet: m
Buchstabe lautet: a
Buchstabe lautet: k
----------------
Ausgabe von f():
Die Quadratzahlen kleiner als 123 lauten:
Quadratzahl lautet: 1
Quadratzahl lautet: 4
Quadratzahl lautet: 9
Quadratzahl lautet: 16
Quadratzahl lautet: 25
Quadratzahl lautet: 36
Quadratzahl lautet: 49
Quadratzahl lautet: 64
Quadratzahl lautet: 81
Quadratzahl lautet: 100
Quadratzahl lautet: 121
----------------
Ausgabe von g():
Verschlüsselung von hallo
Mit Verschiebungssummand: 2
Verschlüsselt: jcnnq
Aufgabe: Versuche vorherzusagen, welche Ausgaben die folgenden (manchmal sinnlosen, manchmal aber auch sinnvollen) Funktionen erzeugen. Erst das Ergebnis notieren, dann ausführen! Sage das Ergebnis auch für andere Eingabewerte voraus!
public static void machJenes4() {
int ausgabeZahl = 0;
int eingabeZahl = 6;
int s = 0;
int z = 11;
for(int i=0; i < eingabeZahl ; i++) {
s = s + z;
Aufgabe: Versuche vorherzusagen, welche Ausgabe die folgende (ziemlich sinnlose) Funktion erzeugt. Erst das Ergebnis notieren, dann ausführen! Sage das Ergebnis auch für andere Wörter als "hey" voraus!
ausgabeText = "Hier das Ergebnis:\n"+ausgabeText;
System.out.println(ausgabeText);
}
15.09.2022
Hausaufgabe: Gib das Ergebnis des untenstehenden Programms an, wenn eingabeText = "fortnite" gilt!
• Erstelle auf dem Desktop ein Verzeichnis mit Namen "IF_TOE"
• Erstelle in diesem Verzeichnis eine .txt-Datei und eine .odt-Datei.
• Schreibe deinen Namen in die .txt-Datei. Erzeuge dann durch geschicktes Copy-and-Paste (mit Hilfe der Tastatur!) eine txt-Datei, die mindestens ein MB groß ist.
• Erzeuge eine Zip-Datei des Ordners und überprüfe die Dateigröße dieser Datei.
• Verschiebe das Verzeichnis auf den Stick deines Nachbarn
• Entzippe die Datei deines Nachbarn und überprüfe, ob er wirklich eine Textdatei der Größe 1 MB erzeugt hatte!
Aufgabe: Versuche vorherzusagen, welche Ausgabe das folgende (ziemlich sinnlose) Programm erzeugt. Erst das Ergebnis notieren, dann ausführen! Sage das Ergebnis auch für andere Wörter als "informatik" voraus!
function machWas() {
var abc = "abcdefghijklmnopqrstuvwxyz";
var ausgabeText = "";
var eingabeText;
eingabeText = document.getElementById("eingabe").value;
eingabeText = eingabeText.toLowerCase();
for(var s = 0;s < 26;s++) {
for(var i=0; i < eingabeText.length ; i++) {
var symbol = eingabeText[i];
var idx = abc.indexOf(symbol);
if (idx != -1) { // idx ist -1, falls das symbol nicht im alphabet vorkommt
var idxAusgabe = idx + s;
if(idxAusgabe >= 26) {
idxAusgabe = idxAusgabe - 26;
}
ausgabeText = ausgabeText + abc[idxAusgabe];
} else {
ausgabeText = ausgabeText + symbol;
}
}
ausgabeText = ausgabeText + "<br>";
}
ausgabeText = "Hier das Ergebnis:<br/>"+ausgabeText;
document.getElementById("ausgabe").innerHTML = ausgabeText;
}
Einstiegsaufgabe:
Verschlüssele das Wort "hey"
• Zunächst mit einer Alphabetverschiebung von 1
• und dann das Ergebnis erneut mit einer Alphabetverschiebung von 25
Was passiert?
function machWas() {
var abc = "abcdefghijklmnopqrstuvwxyz";
var ausgabeText = "";
var eingabeText;
eingabeText = document.getElementById("eingabe").value;
eingabeText = eingabeText.toLowerCase();
// Probleme:
// Leerzeichen (oder andere Zeichen) werden nicht erkannt
// Lösung: Diese Zeichen sollen unverändert bleiben
// Zum Knacken von Gehimtexten will man schnell alle
// Schlüssel durchprobieren.
// Lösung: Das Programm soll automatisch Probieren!
// Groß- und Kleinschreibung wird im Moment immer in Kleinschreibung
// umgewandelt. Es wäre schön, wenn Groß- und Kleinschreibung
// erhalten bliebe:
// Lösung: man arbeitet mit einem kleinen und einem großen abc.
for(var i=0; i < eingabeText.length ; i++) {
var buchstabe = eingabeText[i];
var idx = abc.indexOf(buchstabe);
var idxAusgabe = idx + 7;
if(idxAusgabe >= 26) {
idxAusgabe = idxAusgabe - 26;
}
ausgabeText = ausgabeText+abc[idxAusgabe];
}
ausgabeText = "Hier das Ergebnis:<br/>"+ausgabeText;
document.getElementById("ausgabe").innerHTML = ausgabeText;
}
function machWas() {
var ausgabeText = "";
var eingabeText;
eingabeText = document.getElementById("eingabe").value;
// Aufgabe 1a: Name rückwärts
// Aufgabe 1b: jeder Buchstabe doppelt
// Aufgabe 1c: jedes "o" wird ersetzt durch "obo"
// Aufgabe 2: i-Sprache (alle Vokale durch Vokal+b+Vokal ersetzen)
// Aufgabe 3: Austausch des ersten und des letzten Buchstaben
for(var i=0; i < eingabeText.length ; i++) {
var buchstabe = eingabeText[i];
ausgabeText = ausgabeText+buchstabe;
}
ausgabeText = "Hier das Ergebnis:<br/>"+ausgabeText;
document.getElementById("ausgabe").innerHTML = ausgabeText;
}
Aufgabe: Wie groß muss ein quadratisches Feld sein, wo jedes Bit die Fläche von einem Quadratmillimeter benötigt und insgesamt 1 TB Daten untergebracht werden sollen?
(Hinweis: für 50 Byte benötigt man 2cm*2cm)
50 Byte = 400 Bit
Kantenlänge eines Quadrats, welches 400mm² groß ist, ist: Wurzel(400mm²) = 20mm
Wurzel(8 000 000 000 000 mm²) = 2 828 427 mm
= 2 828,427 m
= ca. 2,8 km
• Bewertungskriterien: Qualität der Mitarbeit, (ggf. auch Quantität, falls themenbezogen), Fachsprache, Selbständigkeit, bei Hausaufgaben: Ernsthafte Ansätze müssen erkennbar sein!
• Bitte einen USB-Stick anschaffen!
• Wer hat Zugriff auf einen PC mit Tastatur und Maus? Vorkenntnisse?
• Kursart checken
Grundlagen Windows
Ich will sehen, wie gut ihr mit Windows umgehen könnt:
• Erstelle auf dem Desktop ein Verzeichnis mit dem Namen "Informatikhelden"
• Erstelle ein Dokument (ein einfacher Kurztext wie "Hallo Informatik" genügt) in der Textverarbeitungssoftware "Open-Office" und speichere es ab in dem Ordner "Informatikhelden"
• Erstelle ein Dokument in dem Programm "Notepad" oder "Notepad++" (beides auf dem Desktop zu finden) mit dem gleichen Text wie in der vorigen Aufgabe. Auch Dieses Dokument soll wieder in dem Verzeichnis "Informatikhelden" abgespeichert werden.
• Schaue Dir den Inhalt des Ordners "Informatikhelden" mit dem Datei-Explorer an und erkläre, welche Unterschiede die beiden abgespeicherten Dateien besitzen.
• Tastaturtraining: Erstelle in Notepad++ eine Kopie von folgendem kleinen Bärchen:
• Kopiere dieses Bärchen in das Open-Office-Dokument hinein und erkläre, warum die Grafik nicht mehr schön aussieht.
• Daten im Zahlenformat anzeigen Dafür gibt es z.B. einen Dienst im Internet: https://hexed.it/ Betrachte die txt-Datei und die odt-Datei mit diesem Programm
• Wie funktioniert ein QR-Code?
• Ein IPhone12 Pro aus dem Jahr 2020 besitzt 6 Gigabyte RAM. Wie groß müsste ein QR-Code (Pixelgröße 1mm) sein, der diese Datenmenge speichern könnte?
• Lösche das Verzeichnis "Informatikhelden". Sind die Daten wirklich weg?
Unterschiede zwischen TXT-Dateien und doc-Dateien (oder odt-Dateien)
TXT-Dateien sind i.d.R. kleiner als Office-Dateien, da in den Office-Dateien Zusatzinformationen (Schriftgöße, Schrifart, Abstände etc.) gespeichert sind.
Bei TXT-Dateien wird für jedes Symbol (Buchstabe oder Zeilenumbruch etc.) genau ein Byte auf die Festplatte geschrieben. D.h. in der Regel kann ich für jede "Stelle" in einer Textdatei eines von 256 Symbolen auswählen, weil ein Byte Werte von 0 bis 255 annehmen kann.
Zahlensysteme Dezimalsystem: Das System, welches wir kennen. Es gibt 10 Ziffern, nämlich 0,1,2,3,4,5,6,7,8,9. Mit diesen Ziffern kann man alle Zahlen auf bekannte Art und Weise bilden! Oktalsystem: Hier hat man nur 8 Ziffern zur Verfügung: 0,1,2,3,4,5,6,7. Nach der Zahl 7 im Oktalsystem kommt die 10 im Oktalsystem, da die Ziffer 8 nicht existiert. Siehe auch: https://de.wikipedia.org/wiki/Oktalsystem Binärsystem: Hier hat man nur 2 Ziffern zur Verfügung: 0 und 1. Siehe auch https://de.wikipedia.org/wiki/Dualsystem Hexadezimalsystem: Hier hat man 16 Ziffern zur Verfügung: 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f. Siehe auch https://de.wikipedia.org/wiki/Hexadezimalsystem
Um Zahlen in verschiedenen Systemen auseinanderzuhalten, kann man jeweils an die Zahl eine Kennzeichnung anhängen. Beispiel:
10(dez) = 12(okt) = 1010(bin) = a(hex)
"Why do programmers always mix up Halloween and Christmas?"
Restvorhaben der letzten Stunden:
• Wie funktioniert ein QR-Code?
• Ein IPhone12 Pro aus dem Jahr 2020 besitzt 6 Gigabyte RAM. Wie groß müsste ein QR-Code (Pixelgröße 1mm) sein, der diese Datenmenge speichern könnte?
• Lösche das Verzeichnis "Informatikhelden". Sind die Daten wirklich weg?
• Verschieben von Dateien, Verzeichnisse anlegen (Desktopmüll entsorgen)
• Einheiten von Datenmengen
Tourlänge ist hier:3014.5739166575654
TourId-String:H1,L2,S1,R1,S4,W4,P1,B5,C1,G3,D4,C2,L1,H3,D1,M1,B2,H2,G1,K3,E1,J1,H4,B6,W2,N1,R2,P2,M4,G2,A2,U1,S2,K5,F3,S3,M5,H5,F2,M3,W1,K4,B3,K2,A1,D3,D5,E3,D2,M2,O1,B1,O2,E2,W3,B4,F1,K1