Benutze chatgpt.com (oder eine ähnliche Webseite) und lasse dir in Java eines der folgenden Programme schreiben:
- Berechnung des Mittelwerts aus 10 (zufällig erzeugten) Zahlen
- Bestimmung der größten von 10 (zufällig erzeugten) Zahlen
- Bestimmung der Spannweite eines Arrays (mit Zufallszahlen belegt)
- Der Abstand zweier (zufällig gewählten) Punkte im 2D-Koordinatensystem
- Die Summe der ersten n Natürlichen Zahlen (wobei n zufällig gewählt wird.)
- Prüfung, ob eine natürliche Zahl n (die zufällig gewählt wird) eine Primzahl ist
- Die Umkehrung einer (zufällig gewählten) natürlichen Zahl n (also aus 1234 wird 4321)
- Ein Programm, welches die Anzahl von Vokalen (a,e,i,o,u) in einem String zählt.
Aufgabe:
• Lasse das generierte Programm erfolgreich in BlueJ laufen
• Versuche jeden Schritt des Programms zu verstehen, so dass Du den Programmablauf beim nächsten Mal erklären kannst.
• Falls die von chatgpt erzeugten Programme zu kompliziert sind, so weise chatgpt an, an den problematischen Stellen Vereinfachungen vorzunehmen. Das Ziel ist, dass Du dein Programm vollständig erklären kannst.
• Das Programm, dass du beim nächsten Mal erklärst, schickst Du mir über folgendes Rückmeldeformular:
Hauptprogramm
public class Haupt {
public static void main() {
System.out.println("Hallo");
Figur a = new Figur(2,2);
Figur b = new Figur(4,5);
for(int i = 0; i < 4; i++) {
printSpielfeld(a,b);
int abstand = a.abstandZu(b);
System.out.println("Abstand: "+abstand);
a.x = a.x + 1;
warte();
}
}
public static void warte() {
try{Thread.sleep(1000);} catch(Exception e) {}
}
/*
* GUI (Graphical User Interface), mit einem eigenen Layout
*/
public class StartGUI implements ActionListener{
JButton but1, but2;
JTextField eingabezeile1;
JLabel lab1;
JFrame frame;
JTextArea textArea;
public void zeigeFenster() {
frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setTitle("Null Layout");
frame.setLayout(null);
eingabezeile1 = new JTextField("5,6,18,3,21,22,113");
eingabezeile1.setBounds(10,10,400,30);
frame.add( eingabezeile1 );
but1 = new JButton("Zahlen auswerten");
but1.setBounds(10,50,200,30);
but1.addActionListener(this);
frame.add( but1 );
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
textArea.setEditable(false);
scrollPane.setBounds(10,90,410,200);
frame.add(scrollPane);
lab1 = new JLabel("Programm zur Zahlenauswertung");
lab1.setBounds(10,300,290,30);
frame.add(lab1);
textArea.append("Die eingegebenen Zahlen:\n"+Arrays.toString(eingabeZahlenArray)+"\n\n");
textArea.append("Der Mittelwert dieser Zahlen:\n"+mw+"\n\n");
textArea.append("Der Mittelwert dieser Zahlen (auf 2 Nachkommastellen gerundet):\n"+mwGerundet+"\n\n");
}
}
public double mittelwert(int[] ia) {
double erg = 0;
for(int i = 0; i < ia.length; i++) {
erg = erg + ia[i];
}
return erg/ia.length;
}
/**
* Wandelt einen String der Form "1,3,5" in ein Array
* von int-Elementen um. Nicht wandelbare Elemente
* werden zu -99999 umgewandelt (was eine ganz schlechte
* Lösung ist - aber momentan wissen wir es nicht besser).
*/
public int[] csvToIntArray(String eing) {
String[] sa = eing.split(",");
int[] erg = new int[sa.length];
for(int i = 0; i < sa.length; i++) {
String sZahl = sa[i];
try {
erg[i] = Integer.parseInt(sZahl);
} catch (NumberFormatException e) {
erg[i] = -99999;
}
}
return erg;
}
public boolean enthaeltidentischeNachbarn(int[] ia) {
boolean erg = false;
// Schleife über alle Elemente des Arrays (ohne das letzte)
// falls aktuelles Element identisch ist mit dem nächsten:
// erg = true
return erg;
}
public int[] reverse(int[] ia) {
int[] neuReverse = new int[ia.length];
// Schleife über alle Elemente des Arrays ia
// belege Element (ia.length-1-i) von neuReverse mit Element i von ia
return neuReverse;
}
public boolean enthaeltIdentischeElemente(int[] ia) {
boolean erg = false;
// Schleife über alle Elemente des Arrays (Schleifenindex i)
// Schleife über alle Elemente des Arrays (Schleifenindex j)
// falls (i!= j UND ia[i] == ia[j]):
// erg = true;
return erg;
}
public static void main() {
StartGUI sg = new StartGUI();
sg.zeigeFenster();
}
}
// Aufgaben:
// 1) Schreibe die Methode "summe(...)", die die Summe aller Zahlen in den Daten berechnet.
// 2) Schreibe die Methode "anzahlGeraderZahlen(...)", die die Anzahl gerader Zahlen in den Daten feststellt
// 3) Schreibe die Methode "anzahlUngeraderZahlen(...)", die die Anzahl ungerader Zahlen in den Daten feststellt
// 4) Schreibe die Methode "groessteZahl(...)", welche die größte Zahl in den Daten feststellt
// 5) Schreibe die Methode "kleinsteZahl(...)", welche die kleinste Zahl in den Daten feststellt
// 6) Schreibe die Methode "spannweite(...)", welche die Differenz zwischen größter und kleinster Zahl wiedergibt
// 7) Schreibe die Methode "istAllesPositiv(...)", welche true zurückgibt, wenn alle Zahlen positiv sind.
// 8) Schreibe die Methode "enthältIdentischeNachbarn(...)", welche true zurückgibt, wenn es zwei Zahlen
// hintereinander gibt, die identisch sind (z.B. bei [1,2,3,3,2,5] wäre es true wegen der drei).
// 9) Schreibe die Methode "reverse(...)", welche ein neues Array zurückgibt, in dem die Zahlenreihe rückwärts erscheint
// 10) Schreibe die Methode "enthältIdentischeElemente", welche überprüft, ob es in dem Array Mehrfachnennungen eines Elements existieren
28.11.2024
Lege ein neues BlueJ-Projekt an und bearbeite die Aufgaben (siehe Ende des Programms).
/*
* GUI (Graphical User Interface), mit einem eigenen Layout
*/
public class StartGUI implements ActionListener{
JButton but1, but2;
JTextField eingabezeile1;
JLabel lab1;
JFrame frame;
JTextArea textArea;
public void zeigeFenster() {
frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setTitle("Null Layout");
frame.setLayout(null);
eingabezeile1 = new JTextField("Hier bitte die Eingabe....");
eingabezeile1.setBounds(10,10,400,30);
frame.add( eingabezeile1 );
but1 = new JButton("Zahlen verschlüsseln");
but1.setBounds(10,50,200,30);
but1.addActionListener(this);
frame.add( but1 );
public static void main() {
StartGUI sg = new StartGUI();
sg.zeigeFenster();
}
}
// Aufgaben:
// 1) Untersuche die Funktionsweise der "Zahlenverschlüsselung". Stelle konkrete Fragen zum Programm
// 2) Erstelle selbst den Programmteil für die "Satzverschlüsselung".
// 3) Erstelle selbst die Funktion "Entschlüsselung".
25.11.2024
Bitte benutzt für heute folgendes Rückmeldeformular:
Lege ein neues BlueJ-Projekt an und bearbeite die Aufgaben (siehe Ende des Programms).
/*
* GUI (Graphical User Interface), mit einem eigenen Layout
*/
public class StartGUI implements ActionListener{
JButton but1, but2;
JTextField eingabezeile1;
JLabel lab1;
JFrame frame;
JTextArea textArea;
public void zeigeFenster() {
frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setTitle("Null Layout");
frame.setLayout(null);
eingabezeile1 = new JTextField("Hier bitte die Eingaben....");
eingabezeile1.setBounds(10,10,400,30);
frame.add( eingabezeile1 );
but1 = new JButton("Umrechnen in Dollar");
but1.setBounds(10,50,200,30);
but1.addActionListener(this);
frame.add( but1 );
but2 = new JButton("Umrechnen in Pfund");
but2.setBounds(220,50,200,30);
but2.addActionListener(this);
but2.setEnabled(false);
frame.add( but2 );
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
textArea.setEditable(true);
scrollPane.setBounds(10,90,410,200);
frame.add(scrollPane);
lab1 = new JLabel("Währungsrechner");
lab1.setBounds(10,300,190,30);
frame.add(lab1);
public static void main() {
StartGUI sg = new StartGUI();
sg.zeigeFenster();
}
}
// Aufgaben:
// 1) Aktiviere den Button "Euro in Pfund" und ergänze das Programm entsprechend.
// 2) Füge einen neuen Button "Euro in Yen" hinzu mit entsprechender Funktionalität.
// 3) Erstelle eine neue Eingabezeile und passende Buttons mit "Dollar in Euro" etc.
//
// 4) Erstelle ein neues Programm, welches Einheiten umrechnen kann:
// z.B. Eingabe in Quadratkilometer und Umrechnung in "x-fach Deutschland" oder "x-Fußballfelder" etc.
// Finde eigene sinnvolle Umrechnungseinheiten
// 5) Erstelle ein neues Programm, welches Brüche kürzen kann
// Zwei Eingabezeilen für Zähler und Nenner müssen angelegt werden.
// Von jenen beiden Zahlen wird der größte gemeinsame Teiler gesucht um dann damit zu kürzen.
// Bei der Suche nach dem ggT kann man so vorgehen:
// Man nimmt sich die erste Zahl als erste "Testzahl".
// Dann läuft eine while-schleife solange, biss man eine Testzahl gefunden hat, durch die beide Eingabezeilen teilbar sind.
// Innerhalb der While-Schleife wird die Testzahl jeweils um eins verringert.
14.11.2024
Lieber Informatikkurs, leider bin ich erkrankt. Daher sollt ihr ohne mich folgendes erarbeiten:
Wir haben bereits einmal eine Funktion geschrieben, die die größte Zahl unter drei Zahlen herausfindet. Ihr schreibt nun eine Funktion, die die größte Zahl unter VIER Zahlen herausfindet. Das Programm soll folgende Struktur haben:
public class Hauptklasse {
public static void main() {
int z1 = (int) (Math.random() * 100);
int z2 = (int) (Math.random() * 100);
int z3 = (int) (Math.random() * 100);
int z4 = (int) (Math.random() * 100);
System.out.println("Die vier Zahlen: "+z1+" "+z2+" "+z3+" "+z4);
int g = groessteVonVierZahlen(z1,z2,z3,z4);
System.out.println("Die groesste davon: "+g);
}
public static int groessteVonVierZahlen(int a, int b, int c, int d) {
int erg = -1000; // hier fehlt eine sinnvolle Vorbelegung
// hier müsst ihr eure Ideen ergänzen
return erg;
}
}
Eure Arbeit schreibt ihr bitte auf einen Zettel, so dass ich am Montag morgen direkt kontrollieren kann. Viel Erfolg!
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
// 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
// }
/*
* 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();
/**
* 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.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
/*
* 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);
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();
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);
Hier die Lösung:
import java.util.Scanner;
public class Haupt {
public static void main() {
System.out.println("Zahlenratespiel");
Scanner scanner = new Scanner(System.in);
int anzVersuche = 0;
int zuRatendeZahl = (int) (Math.random()*20) + 1;
System.out.println("Errate eine Zahl zwischen 1 und 20!");
boolean weitermachen = true;
while(weitermachen) {
System.out.println("Dein nächster Tipp?");
anzVersuche = anzVersuche + 1;
String eingabe = scanner.nextLine();
int eingabeZahl = Integer.parseInt(eingabe);
if(eingabeZahl < zuRatendeZahl) {
System.out.println("Dein Tipp war kleiner als die zu erratende Zahl.");
}
if(eingabeZahl > zuRatendeZahl) {
System.out.println("Dein Tipp war größer als die zu erratende Zahl.");
}
if(eingabeZahl == zuRatendeZahl) {
System.out.println("Hurra! Du hast die Zahl erraten!");
weitermachen = false;
}
}
System.out.println("Du hast "+anzVersuche+" Versuche gebraucht.");
}
}
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;
}
}
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"
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.
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!
• 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)
"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