03.11.2024
Klausurthemen für die Klausur am 11.11.2024
• Einheiten umrechnen können (Bit, Byte, KB, MB, GB)
• Binäres Zählen und einfache Rechnungen (Umrechnung Dezimal, Binär, Hexadezimal für kleine Zahlen)
• Modulo-Funktion "%"
• Java mit Turtlegrafik
• tixy.land: Hier werde ich die Ideen hinter den Übungen 1 bis (einschließlich) 12 abgefragt, die wir auf folgender Seite durchgearbeitet haben:
https://www.mathsuniverse.com/tixy
• Java-Programmierung:
•--- Programme lesen und Ausgabe vorhersagen können
•--- selbst kleine Funktionen schreiben können
•--- Beispiele zu Klasse, Methode, Eigenschaft, Objekt: Nur Zuordnungen machen (siehe z.B.
https://programmieren-starten.de/blog/objektorientierte-programmierung/ (ohne Abschnitt "Vererbung") oder auch unsere Beispiele unten auf dieser Seite.
Programmbeispiel "Programme lesen" und eigene Funktionen
public class Haupt {
public static void main() {
double z1 = Math.random() * 100; // Zufallszahl (Kommazahl) 0 - 99.999...
double z2 = Math.random() * 100; // Zufallszahl (Kommazahl) 0 - 99.999...
double z3 = Math.random() * 100; // Zufallszahl (Kommazahl) 0 - 99.999...
int z4 = (int) (Math.random() * 100); // Zufallszahl (Ganze Zahl) 0 - 99
mw(z1,z2,z3);
primzahltest(z4);
quatschfunktion(z4);
// Untersuche zunächst die Funktion "istZahlenpalindrom"
istZahlenpalindrom(12321);
istZahlenpalindrom(4123214);
istZahlenpalindrom(4123215);
// Programmiere die Funktion quersumme
quersumme(123456);
// Programmiere die Funktion fakultaet
fakultaet(6);
// Programmiere die Funktion kuerzen
kuerzen(18,12);
}
/*
* Fakultät einer Zahl
* Beispiel: 6 Fakultät = 6*5*4*3*2*1 = 720
*/
public static void fakultaet(int a) {
int ergebnis = 1;
int faktor = 1;
// Schleife, die a-fach läuft {
// neuer Wert von ergebnis ist (der alte Wert von ergebnis * faktor)
// faktor um 1 erhöhen
// }
System.out.println("Die Fakultät von "+a+" ist: "+ergebnis);
}
/*
* Kürzen eines Bruchs:
* aus 12/8 wird 3/2
*/
public static void kuerzen(int z, int n) {
int testdivisor = n;
System.out.println("Ich versuche den Bruch "+z+"/"+n+" zu kürzen:");
// Kein intelligenter, aber einfach zu programmierender Algorithmus:
// Schleife, die n mal läuft {
// ist z UND n durch testdivisor teilbar?
// falls ja: z und n durch z/testdivisor und n/testdivisor ersetzen
// testdivisor um eins verringern
// }
System.out.println("Der gekürzte Bruch lautet "+z+"/"+n);
}
/*
* Quersumme einer ganzen Zahl
*/
public static void quersumme(int a) {
int ergebnis = 0;
// hier muss "nur" die Idee der Funktion
// istZahlenpalindrom geringfügig angepasst werden.
System.out.println("Die Quersumme von "+a+" ist: "+ergebnis);
}
/*
* Prüfung, ob eine Zahl ein Palindrom (also von vorn wie von hinten gelesen
* die gleiche Zahl ist) ist.
*/
public static void istZahlenpalindrom(int a) {
int rueckwaerts = 0;
int hilf1 = a;
int hilf2;
while(hilf1 > 0) {
hilf2 = hilf1/10; // Das Ergebnis ist eine ganze Zahl: z.B.: 178/10 ist 17.
int differenz = hilf1 - (hilf2 * 10);
rueckwaerts = rueckwaerts*10 + differenz;
hilf1 = hilf2;
}
if(rueckwaerts == a) {
System.out.println("Die Zahl "+a+" ist ein Palindrom "+rueckwaerts);
} else {
System.out.println("Die Zahl "+a+" ist kein Palindrom "+rueckwaerts);
}
}
/*
* Mittelwert dreier Zahlen
*/
public static void mw(double a, double b, double c) {
double mw;
mw = (a + b + c) / 3;
System.out.println("Mittelwert von "+a+" "+b+" "+c+" ist: "+mw);
}
/*
* Primzahltest
*/
public static void primzahltest(int a) {
boolean istPrim = true;
int testzahl = 2;
while(testzahl < a) {
if(a%testzahl == 0) {
// Teiler gefunden! a ist nicht Primzahl!
istPrim = false;
}
testzahl = testzahl+1;
}
if(istPrim) {
System.out.println("Die Zahl "+a+" ist eine Primzahl.");
} else {
System.out.println("Die Zahl "+a+" ist keine Primzahl.");
}
}
/*
* Unsinnsfunktion
* In einer Klausur könnte man abfragen, welche Ausgabe diese Funktion
* liefert, wenn sie mit dem Wert a=15 aufgerufen wird.
*/
public static void quatschfunktion(int a) {
int b = 5;
int c = a;
while(b > 0) {
System.out.println("Der Wert von b: "+b);
System.out.println("Der Wert von c: "+c);
c = c + b;
b = b - 1;
}
}
}
Programmbeispiel Turtlegrafik
public class Haupt {
public static void main() {
Turtle t = new Turtle();
for(int i = 0; i < 10; i++) {
t.hinterlasseKeineSpur();
t.geheZu(Math.random()*500, Math.random()*500);
t.setzeRichtung(Math.random()*360);
zeichneSymbolEins(t, 40);
zeichneSymbolZwei(t, 40);
zeichneSymbolEins(t, 40);
zeichneSymbolZwei(t, 40);
}
}
/**
* Diese Methode zeichnet die Ziffer "1" mit einer
* vorgegebenen Breite. Die Höhe des Symbols ist gleich dessen Breite.
* Innerhalb dieser Breite ist an der rechten Seite ein wenig
* freier Platz eingeplant (nämlich 20%), damit die Symbole, die
* nebeneinander platziert werden, eine sichtbare Trennung haben.
* Nach der Zeichnung des Symbols ist die Turtle genau an der passenden
* Position für ein weiteres Symbol.
* @author Frank Töns
* @param z das Turtle-Objekt, welches das Symbol zeichnen soll
* @param breite Breite des Symbols
*/
public static void zeichneSymbolEins(Turtle z, double breite) {
double altX = z.gibX();
double altY = z.gibY();
double altR = z.gibRichtung();
double hoehe = breite;
double zbreite = breite*0.8; // Nur 90% der Breite wird für's Zeichnen benutzt
z.hinterlasseSpur();
z.geheVor(zbreite); // Grundseite
z.drehe(180);
z.geheVor(zbreite/2);
z.drehe(90);
z.geheVor(hoehe); // senkrechter Strich
z.drehe(-135);
z.geheVor(zbreite/2); // Haken
z.hinterlasseKeineSpur();
z.geheZu(altX, altY); // Alte Startposition einnehmen
z.setzeRichtung(altR);
z.geheVor(breite); // um Zeichenbreite weiterrücken
z.hinterlasseSpur();
}
/**
* Diese Methode zeichnet die Ziffer "2" mit einer
* vorgegebenen Breite. Die Höhe des Symbols ist gleich dessen Breite.
* Innerhalb dieser Breite ist an der rechten Seite ein wenig
* freier Platz eingeplant (nämlich 20%), damit die Symbole, die
* nebeneinander platziert werden, eine sichtbare Trennung haben.
* Nach der Zeichnung des Symbols ist die Turtle genau an der passenden
* Position für ein weiteres Symbol.
* @author Frank Töns
* @param z das Turtle-Objekt, welches das Symbol zeichnen soll
* @param breite Breite des Symbols
*/
public static void zeichneSymbolZwei(Turtle z, double breite) {
double altX = z.gibX();
double altY = z.gibY();
double altR = z.gibRichtung();
double hoehe = breite;
double zbreite = breite*0.8; // Nur 90% der Breite wird für's Zeichnen benutzt
z.hinterlasseSpur();
z.geheVor(zbreite); // Grundseite
z.drehe(-90);
z.geheVor(breite/20); // Serife
z.hinterlasseKeineSpur();
z.geheZu(altX, altY); // Alte Startposition einnehmen
z.setzeRichtung(altR);
z.hinterlasseSpur();
double faktor=0.25;
z.drehe(-10);
z.geheVor(breite*2*faktor);
z.drehe(-30);
z.geheVor(breite*faktor);
z.drehe(-30);
z.geheVor(breite*faktor);
z.drehe(-30);
z.geheVor(breite*faktor);
z.drehe(-30);
z.geheVor(breite*faktor);
z.drehe(-30);
z.geheVor(breite*faktor);
z.drehe(-30);
z.geheVor(breite*faktor);
z.hinterlasseKeineSpur();
z.geheZu(altX, altY); // Alte Startposition einnehmen
z.setzeRichtung(altR);
z.geheVor(breite); // um Zeichenbreite weiterrücken
z.hinterlasseSpur();
}
}
31.10.2024
Zahlenratespiel mit Grafischer Benutzeroberfläche
Folgende beiden Klassen liefern uns das Zahlenratespiel als GUI-Version:
Klasse StartGUI
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
/*
* GUI (Graphical User Interface), mit einem eigenen Layout
*/
public class StartGUI implements ActionListener{
JButton but1, but2;
JTextField eingabezeile1;
JLabel lab1;
JFrame frame;
JTextArea textArea;
ZahlenRateSpielstand meinSpiel;
public void zeigeFenster() {
frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setTitle("Null Layout");
frame.setLayout(null);
but1 = new JButton("Spiel starten");
but1.setBounds(10,10,200,30);
but1.addActionListener(this);
frame.add( but1 );
eingabezeile1 = new JTextField("Hier bitte die Eingaben....");
eingabezeile1.setBounds(220,10,200,30);
frame.add( eingabezeile1 );
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
textArea.setEditable(true);
scrollPane.setBounds(10,50,410,200);
frame.add(scrollPane);
but2 = new JButton("Tipp abgeben");
but2.setBounds(210,260,200,30);
but2.addActionListener(this);
frame.add( but2 );
lab1 = new JLabel("Informatik macht Spaß.");
lab1.setBounds(10,260,190,30);
frame.add(lab1);
frame.pack();
frame.setSize(630,350);
frame.setResizable(false);
frame.setVisible( true );
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == but1) {
textArea.append("Spiel wird neu gestartet.\n");
textArea.append("Gib deinen ersten Tipp ab!\n");
meinSpiel = new ZahlenRateSpielstand();
}
if(e.getSource() == but2) {
if(meinSpiel.gehtsWeiter()) {
String eingabe = eingabezeile1.getText();
int eingabeZahl = Integer.parseInt(eingabe);
String antwort = meinSpiel.tippAbgebenUndAntwortErhalten(eingabeZahl);
textArea.append(antwort+"\n");
if(meinSpiel.gehtsWeiter()) {
textArea.append("Gib deinen nächsten Tipp ab!\n");
}
} else {
textArea.append("Bitte starte ein neues Spiel!\n");
}
}
}
public static void main() {
StartGUI sg = new StartGUI();
sg.zeigeFenster();
}
}
Klasse Zahlenratespielstand
public class ZahlenRateSpielstand {
int anzVersuche;
int zuRatendeZahl;
boolean weitermachen;
public ZahlenRateSpielstand() {
anzVersuche = 0;
zuRatendeZahl = (int) (Math.random()*20) + 1;
weitermachen = true;
}
public boolean gehtsWeiter() {
return weitermachen;
}
public int gibAnzVersuche() {
return anzVersuche;
}
public String tippAbgebenUndAntwortErhalten(int e) {
String antwort = "";
anzVersuche = anzVersuche + 1;
if(e < zuRatendeZahl) {
antwort = "Dein Tipp war kleiner als die zu erratende Zahl.";
}
if(e > zuRatendeZahl) {
antwort = "Dein Tipp war größer als die zu erratende Zahl.";
}
if(e == zuRatendeZahl) {
antwort = "Hurra! Du hast die Zahl erraten!";
weitermachen = false;
}
return antwort;
}
}
28.10.2024
Eine kleine Programmierübung
Schreibe das Programm "Zahlenratespiel", indem du folgende Programmzeilen (die in falscher Reihenfolge gelistet sind) benutzt. (Es fehlen außerdem noch Zeilen, die nur aus "geschweifte Klammer zu" bestehen.
Programmgerüst
while(weitermachen) {
weitermachen = false;
public static void main() {
public class Haupt {
int zuRatendeZahl = (int) (Math.random()*20) + 1;
int eingabeZahl = Integer.parseInt(eingabe);
int anzVersuche = 0;
import java.util.Scanner;
if(eingabeZahl > zuRatendeZahl) {
if(eingabeZahl == zuRatendeZahl) {
if(eingabeZahl < zuRatendeZahl) {
boolean weitermachen = true;
anzVersuche = anzVersuche + 1;
System.out.println("Zahlenratespiel");
System.out.println("Hurra! Du hast die Zahl erraten!");
System.out.println("Errate eine Zahl zwischen 1 und 20!");
System.out.println("Du hast "+anzVersuche+" Versuche gebraucht.");
System.out.println("Dein nächster Tipp?");
System.out.println("Dein Tipp war kleiner als die zu erratende Zahl.");
System.out.println("Dein Tipp war größer als die zu erratende Zahl.");
String eingabe = scanner.nextLine();
Scanner scanner = new Scanner(System.in);
Zusatzaufgabe 1: Erweitere das Programm so, dass es am Ende - abhängig von der Anzahl gebrauchter Versuche - Lob oder Tadel gibt: z.B. "Toll, nur 2 Versuche gebraucht!" oder "Ganz schön schlecht! Du hast mehr als 8 Versuche gebraucht."
07.10.2024
Das Spiel "Mensch ärgere Dich nicht" ist sicher allgemein bekannt. Das Spiel "Töns ärgere Dich nicht" funktioniert folgendermaßen:
Wie auf einem Ziffernblatt angeordnet gibt es 12 Felder. Jede Spielerin oder Spieler startet mit genau einer Spielfigur in einer bestimmten Farbe auf dem Feld ganz oben (der 12). Nun wird der Reihe nach gewürfelt. Wir nehmen als Beispiel folgenden Spielablauf mit zwei Spielern an:
• Spieler 1 würfelt eine 1 -> Damit wird die erste Figur auf die "1" gesetzt.
• Spieler 2 würfelt eine 2 -> Damit wird die zweite Figur auf die "2" gesetzt.
• Spieler 1 würfelt eine 1 -> Damit wird die erste Figur auf die "2" gesetzt. Dort steht aber schon die Figur von Spieler 2. Diese wird geschlagen und muss zurück auf das Startfeld "12".
Gewonnen hat die Figur, die als erstes die 12 erneut überschreitet.
Hinweis zu den Aufgaben: Kopiere immer die Methode "toensAergereDichNicht0" und ändere die Ziffer am Ende. So kannst Du unterschiedliche Programmversionen für jede Aufgabe beibehalten.
Aufgabe 1: Erweitere das Programm so, dass jeder Spieler zu Beginn gefragt wird, welche Farbe die Spielfigur hat. Dies soll in der Spielstandübersicht mit ausgegeben werden.
Aufgabe 2: Erweitere das Programm so, dass zu jeder Figur gespeichert wird, wie oft sie schon geschlagen wurde.
Aufgabe 3: Erweitere das Programm so, dass das Programm für drei Spieler funktioniert.
Programmgeruest
import java.util.*;
public class Haupt {
public static void eingabeDemo() {
Scanner sc = new Scanner(System.in);
String eingabe;
int z;
System.out.println("Bitte gib deinen Namen ein:");
eingabe = sc.nextLine();
System.out.println("Ok "+eingabe+", gib Dein Alter ein:");
z = Integer.parseInt(sc.nextLine());
System.out.println("Ok "+eingabe+", in 10 Jahren bist Du "+(z+10)+" Jahre alt!");
}
public static void toensAergereDichNicht0() {
Scanner sc = new Scanner(System.in);
int wurf;
int nextPos;
int positionFigur1 = 0;
int positionFigur2 = 0;
int werIstDran = 1;
boolean spielLaeuftNoch = true;
while(spielLaeuftNoch) {
System.out.println("----");
System.out.println("Der Spielstand sieht gerade so aus:");
System.out.println("(Die Startposition 12 wird mit '0' ausgedrückt)");
System.out.println("Figur 1 auf Position: "+positionFigur1);
System.out.println("Figur 2 auf Position: "+positionFigur2);
System.out.println("----");
System.out.println("Gib den Würfelwurf von Figur "+werIstDran+" ein:");
wurf = Integer.parseInt(sc.nextLine());
if(werIstDran == 1) {
nextPos = positionFigur1 + wurf;
if (positionFigur2 == nextPos) {
// Figur 2 wird geschlagen
System.out.println("Figur 2 wird geschlagen und zurückgesetzt.");
positionFigur2 = 0;
}
positionFigur1 = nextPos;
werIstDran = 2;
} else if(werIstDran == 2) {
nextPos = positionFigur2 + wurf;
if (positionFigur1 == nextPos) {
// Figur 1 wird geschlagen
System.out.println("Figur 1 wird geschlagen und zurückgesetzt.");
positionFigur1 = 0;
}
positionFigur2 = nextPos;
werIstDran = 1;
}
if(positionFigur1 >= 12) {
System.out.println("Glückwunsch Spieler 1: Du hast gewonnen!");
spielLaeuftNoch = false;
}
if(positionFigur2 >= 12) {
System.out.println("Glückwunsch Spieler 2: Du hast gewonnen!");
spielLaeuftNoch = false;
}
}
}
}
30.09.2024
Ein Programmteil zum Kopieren und Ergänzen:
https://zumpad.zum.de/
sandkasten
20240930_ifefg2
23.09.2024
Ein Java-Projekt mit Turtlegrafik:
20240922_turtle_test.zip
16.09.2024
Lerninhalte bisher:
Modellierung: Eine Schwierigkeit in der Informatik ist es, Zusammenhänge aus der Wirklichkeit in ein Programm oder eine Formel umzuwandeln.
Computer sind "schnell": Manche Dinge passieren so schnell hintereinander, dass die Illusion von Gleichzeitigkeit entsteht oder manche Dinge nicht wahrnehmbar sind, obwohl sie passieren (und nur für einen Bruchteil einer Sekunde sichtbar sind).
Rechnen im Computer:
Die Modulo-Funktion %: "Rest bei der Grundschuldivision"
z.B.: 5%2 = 1 // 19%5 = 4 // 5%19 = 5
Programmierung mit Scratch
https://scratch.mit.edu/
Beobachtungen: Programme werden Schritt für Schritt "hintereinander" ausgeführt. Gleichzeitigkeit (obwohl prinzipiell möglich) ist für unsere Programmierarbeit erst einmal kein Thema.
Es gibt zwei wesentliche Strukturen: Wiederholung ("loop") und Verzweigung ("if-else"), mit denen man praktisch jede Programmlogik programmieren kann.
Variablen enthalten Werte (Zahlen oder auch Buchstaben oder ganze Texte). Den Variablennamen können wir frei wählen (die Namen dürfen keine Leerzeichen enthalten und nicht mit einer Ziffer beginnen). Der Wert einer Variablen lässt sich während eines Programms verändern.
Aufgaben:
1. Schreibe ein Programm in Scratch, welches mit dem Malstift ein Stern mit 10 (dann 11, dann 12) Zacken zeichnet.
2. Schreibe ein Programm in Scratch, welches zunächst den Benutzer fragt, wieviele Zacken der gewünschte Stern haben soll. Unsinnige Werte sollen abgefangen werden.
Hausaufgabe:
Schreibe eine eigene Prozedur "Pfeilspitze"
20240918_stern_mit_kringeln.sb3
12.09.2024
TIXY.land Nachschlag
Zu Übung 12 aus:
https://www.mathsuniverse.com/tixy
Probiere auch aus: (i%3)/3
Arbeitsweise des Modulo-Operators besprechen.
Gemeinsame Bearbeitung von Übungen 37 bis 41, dann noch Übung 45.
Ggf. sin(x)
09.09.2024
Konzept Funktion:
Eine Funktion in der Informatik funktioniert ähnlich wie Funktionen in der Mathematik:
Bekanntes Beispiel aus der Mathematik: f(x) = x² + 1
Nun gilt: f(4) = 17, f(5) = 26 usw.
Man setzt einen x-Wert in die Funktion ein und erhält nach einer Rechnung einen y-Wert.
In der Informatik muss der "x-Wert" nicht unbedingt eine Zahl sein. Er kann auch z.B. eine Zeichenkette sein:
Übliches Beispiel aus der Informatik: len(x)
Es gilt dann: len("nase") = 4 und len("zap") = 3
(hier kann keine Rechenvorschrift angegeben werden, weil zur Ermittlung des Funktionswertes ein kleines Programm ausgeführt wird)
In der Informatik besteht der "x-Wert" oft aus mehreren einzelnen Werten:
z.B. die Funktion ZeichenketteEnthält(x,b)
Damit: ZeichenketteEnthält("schule","z") = false (weil der Buchstabe z nicht in der Zeichenkette schule enthalten ist)
Oder : ZeichenketteEnthält("schule","e") = true (weil der Buchstabe e in der Zeichenkette schule enthalten ist)
Hieran sieht man außerdem, dass der Funktionswert nicht unbedingt eine Zahl sein muss. In diesem Fall sind nur "ja/nein" Antworten in der Wertemenge enthalten.
TIXY
Bei tixy.land gilt: Der "x-Wert" besteht aus vier Zahlen:
t - verstrichene Zeit in Sekunden
i - durchlaufende Nummer des Pixels
x - x-Koordinate des Pixels
y - y-Koordinate des Pixels
Nun muss man eine Rechenvorschrift basteln (also eine Funktion), die aus diesen Werten eine Zahl zwischen -1 und 1 erzeugt (Werte über 1 werden zu 1, Werte unter -1 werden zu -1 abgeändert). Für jedes der 256 Pixel wird die gebastelte Funktion aufgerufen und damit die Pixeldarstellung berechnet.
Beispiel:
(t,i,x,y) => t/2
Nach z.B. 0.2 Sekunden hat die Funktion den Wert 0.1. Damit ist der Darstellungswert für jedes Pixel 0.1 (also ein kleiner Kreis). Mit der Zeit - also bis nach 2 Sekunden wird jeder Kreis zum Vollkreis. Darüber hinaus ändert sich nichts mehr (da Zahlen über 1 zu 1 abgeändert werden)
(t,i,x,y) => i/5
Die ersten sechs Pixel (durchnumeriert von Null bis 4) bekommen die Werte 0, 0,2 0,4 0,6 und 0,8 zugeordnet. Danach sind die Werte 1 oder höher und damit werden nur noch Vollkreise gezeichnet.
Die x- und y-Koordinaten sind folgendermaßen zu verstehen: die x-Achse verläuft (wie in der Mathematik) nach rechts, die y-Achse aber nach unten!
Das erste Pixel ganz oben links hat die Koordinaten (0|0)
Das erste Pixel der nächsten Zeile (also darunter) hat die Koordinaten (0|1)
(t,i,x,y) => x/5
Hier werden die ersten fünf Pixel links in jeder Zeile die Kreise etwas dünner gezeichnet. Also fast wie i/5, nur in jeder Zeile.
Die Formeln sind nichts anderes als JavaScript-Ausdrücke. Dabei gibt es die Besonderheit, dass Funktionswerte, die keine Zahlen sind, zu Zahlen umgewandelt werden:
(t,i,x,y) => i == 2
Dahinter steckt die Abfrage "Hat i den Wert 2?": Die Antwort "ja" wird zu 1 umgewandelt, die Antwort "nein" wird zu 0 umgewandelt.
Durlaufe nun folgendes Tutorial
https://www.mathsuniverse.com/tixy
Aufgaben: Erzeuge folgende Bilder:
a) Obere Hälfte weiß, untere Hälfte leer
b) Obere Hälfte weiß, untere Hälfte rot
c) Führe a und b auch für links rechts, statt "oben unten" aus. Ebenso "Unten Oben" statt Oben unten.
d) Erzeuge die Muster mit Diagonalen!
Erzeuge deine Muster bei
https://tixy.land/
23.08.2024
Informatikunterricht in der EF bei Herrn Töns
• 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!
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 folgenden Tierchen:
• 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)
Ergänze:
11(dez) = ___(okt) = _ ___(bin) = ___(hex)
__(dez) = 11(okt) = ____(bin) = ___(hex)
__(dez) = ___(okt) = 11101(bin) = ___(hex)
__(dez) = ___(okt) = ____(bin) = 23(hex)
__(dez) = ___(okt) = ____(bin) = ff(hex)
"Why do programmers always mix up Halloween and Christmas?"
Programmierung in Java
Grundstrukturen
Java-Programme sind in sogenannten "Klassen" organisiert, also Programmeinheiten. In BlueJ werden Klassen im Hauptfenster als Rechtecke dargestellt.
Innerhalb einer Klasse eingeklammert sind einzelne "Methoden". Eine Klasse kann viele Methoden enthalten. Beispiel:
public class Haupt {
public static void main() {
double zahl = 7;
double quadratzahl = berechneQuadrat(zahl);
System.out.println("Quadratzahl ist: "+quadratzahl);
}
public static double berechneQuadrat(double z) {
double ergebnis = z * z;
return ergebnis;
}
}
In dieser Klasse sind zwei Methoden (nämlich "main" und "berechneQuadrat") enthalten. An den geschweiften Klammern kann man erkennen, dass die Methoden
in der Klasse enthalten sind (und nicht etwa darunter stehen).
Mit geschweiften Klammern werden auch andere Programmteile abgegrenzt. Am wichtigsten sind hier die Schleifen-Anweisung (also die "for-Schleife" und die "while-schleife") und die if-Anweisung. Beispiel:
for(int i = 0; i<10 ; i++) {
.... // Dieser Teil wird 10 mal ausgeführt
}
while(spielfigurLebt) {
.... // wird solange wiederholt, wie die Bedingung wahr ist
}
if(meineVar < 10) {
.... // Dieser Teil wird nur ausgeführt,
// wenn eine Bedingung erfüllt ist.
}
Klassen und Objekte
Wenn wir mit Zeichnenstiften (Stichwort Turtlegrafik) eine Grafik in ein Fenster zeichnen, so kann es praktisch sein, zwei unterschiedliche Zeichenstifte z.B. mit unterschiedlichen Farben zu steuern, die aber jeweils die gleichen Befehle ("geheVor", "drehe") verstehen. In diesem Fall ist "Turtle" eine Klasse, von der mehrere "Objekte" (die wir selbst benennen können) angelegt werden.
Andere Beispiele sind:
* In dem Spiel Pacman wird die Spielfigur des Spielers von vier Geistern verfolgt. Im Programm könnten diese vier Geister vier Objekte einer einzigen Klasse "Geist" sein, die selbst Methoden besitzt wie z.B. "ändereDeineFarbe".
* In einer Schulverwaltungssoftware werden Schülerdaten gespeichert. Jeder einzelne Schülerdatensatz könnte ein Objekt der Klasse "SchülerIn" sein. Eine Methode könnte "setzeMarkierungFürErhalteneMasernimpfung" sein.
Methoden und Eigenschaften
Bei der Turtlegrafik heißen die Befehle wie "geheVor" oder "drehe" Methoden. Auf Objekten kann man bestimmte Methoden anwenden, sofern die entsprechende Klasse diese Methoden zur Verfügung stellt.
Objekte haben aber auch Eigenschaften: Ein Turtle-Objekt kennt z.B. die eigene Richtung, in der sie schaut. Die Richtung ist also eine Eigenschaft.
Beispiele für Klassen, Objekte, Methoden und Eigenschaften
Beispiel: Straßenlaterne
Möglicher Klassenname: Straßenlaterne
Mögliche Objekte der Klasse: laterneVorDerSchule, laterneKioskReeserPlatz
Mögliche Eigenschaften: Standort (Geokoordinaten), Leuchtstärke (in Lumen), istEingeschaltet (ja,nein?)
Mögliche Methoden: schalteEin, schalteAus
Beispiel: Schach
Möglicher Klassenname: Schachfigur
Mögliche Objekte der Klasse: bube1, bube2, ... bube8, turm, springer ....
Mögliche Eigenschaften: Farbe (weiß oder schwarz), Form (...), möglicheBewegungen (schräg, gerade, mehrere Felder überspringbar, Rösselsprung), Position (z.b. B5, E6 ...)
Mögliche Methoden: geheZu(Position), ersetzeFigurDurch(andereFigur)
Beispiel: "Klassenräume im GBG"
Mögliche Klasse "Klassenraum"
mögliche Objekte der Klasse Raum: R1.11, R1.01, R2.01
Eigenschaften:
"Informatikraum" (mögliche Werte:
"betretbar" (mögliche Werte: Ja, Nein)
"türOffen" (ja, nein)
"fensterOffen" (ja, nein)
"lichtAn" (ja, nein)
"imRaumAnwesend" (Liste von Schülern)
Methoden: geheRein(Schüler X), öffneTür(), öffneFenster(), schalteLichtEin()