Informatik -- Lehrveranstaltung vom 03.06.2024
(EN google-translate)
(PL google-translate)
Themen
|
1. Vererbung


Die nachfolgenden C++ - Beispiele werden im Unterricht als Java-Code umgesetzt werden.
public class Messwerte { private int MAXANZAHL=10000; private double[] x = new double[MAXANZAHL]; //Ordinate private double[] y = new double[MAXANZAHL]; //Abszisse private int anzahl = 0; public void add(double xx, double yy) { x[anzahl]=xx; y[anzahl]=yy; anzahl++; } public double getX(int index) { if(index>=0 && index<anzahl) { return x[index]; } else { println("UNGÜLTIGE ABFRAGE!"); return 0.0; } } public double getY(int index) { if(index>=0 && index<anzahl) { return y[index]; } else { println("UNGÜLTIGE ABFRAGE!"); return 0.0; } } } Messwerte messungen1 = new Messwerte(); Messwerte messungen2 = new Messwerte(); public void setup() { double x=-10.0; while(x<=10.0) { messungen1.add(x,x*x); messungen2.add(x,x*x*x); x+=1.0; } println("mess1: index0 x="+messungen1.getX(0)+" y="+messungen1.getY(0)); println("mess2: index0 x="+messungen2.getX(0)+" y="+messungen2.getY(0)); } public void draw() { }
Code 0-1: Messwerte001
public class Messwerte { private int MAXANZAHL=10000; protected double[] x = new double[MAXANZAHL]; //Ordinate protected double[] y = new double[MAXANZAHL]; //Abszisse protected int anzahl = 0; public void add(double xx, double yy) { x[anzahl]=xx; y[anzahl]=yy; anzahl++; } public double getX(int index) { if(index>=0 && index<anzahl) { return x[index]; } else { println("UNGÜLTIGE ABFRAGE!"); return 0.0; } } public double getY(int index) { if(index>=0 && index<anzahl) { return y[index]; } else { println("UNGÜLTIGE ABFRAGE!"); return 0.0; } } } public class MesswerteShow extends Messwerte { public void zeigeMesswerte() { println("Alle Messwerte:"); for(int i=0;i<anzahl;i++) { println(x[i]+" | "+y[i]); } } } MesswerteShow messungen1 = new MesswerteShow(); MesswerteShow messungen2 = new MesswerteShow(); public void setup() { double x=-10.0; while(x<=10.0) { messungen1.add(x,x*x); messungen2.add(x,x*x*x); x+=1.0; } println("Alle Messwerte von Messungen 1:"); messungen1.zeigeMesswerte(); } public void draw() { }
Code 0-2: Messwerte002 -- >Die Klasse MesswerteShow beerbt die Klasse Messwerte.


Von Library-Klasse erben:
import java.util.Random; //Random zufall = new Random(0); public class Zufall extends Random { public Zufall(long seed)//meine meine eigene Konstruktormethode { super(seed);//greift auf den Konstruktor der Oberklasse zu. } //Liefert Zufallszahl zwischen [min,max] (inklusive) public int getInt(int min, int max) { return min + nextInt(max-min+1); } } //Zufall zufall = new Zufall(0); Zufall zufall = new Zufall(System.currentTimeMillis()); public void setup() { for(int i=0;i<20;i++) print(zufall.nextInt(10)+" "); // liefert 0..9 zufällig, gleichverteilt println(); for(int i=0;i<20;i++) print(zufall.getInt(5,10)+" "); // liefert Werte zwischen 5 und 10 inklusive }
Code 0-3: Von Library-Klasse erben, Beispiel Random.
2. Interfaces

3. Vorbesprechung dazu, das Räuber-Beute-Modell in den objektorientierten Simulator einzupflegen
Siehe Aufgabe 8.2 (Day by day, vorletzte LV)
4. Übungen
Aufgabe 8.2 (Day by day, vorletzte LV)
Aufgabe 10.0
|
Aufgabe 10.1
public class Matrix { private double[][] mat = new double[2][2]; public double get(int zeile, int spalte) { return mat[zeile][spalte]; } public void set(int zeile, int spalte, double wert) { mat[zeile][spalte]=wert; } } public class Mat extends Matrix { public void show() { //.... } public void transpose() { //.... } } public void setup() { }
Code 0-4: Vererbung001
|
LÖSUNG:
public class Matrix { protected double[][] mat = new double[2][2]; public double get(int zeile, int spalte) { return mat[zeile][spalte]; } public void set(int zeile, int spalte, double wert) { mat[zeile][spalte]=wert; } } public class Mat extends Matrix { public void show() { println(mat[0][0]+" | "+mat[0][1]); println(mat[1][0]+" | "+mat[1][1]); } public void transpose() { double help = mat[0][1]; mat[0][1]=mat[1][0]; mat[1][0]=help; } } Mat m1 = new Mat(); Mat m2 = new Mat(); public void setup() { m1.set(0,0,1.0); m1.set(0,1,2.0); m1.set(1,0,3.0); m1.set(1,1,4.0); m2.set(0,0,10.0); m2.set(0,1,20.0); m2.set(1,0,30.0); m2.set(1,1,40.0); m1.show(); m1.transpose(); m1.show(); println("2. Matrix:"); m2.show(); }
Code 0-5: Lösung.
Aufgabe 10.2 -- Schnittstellen
public interface Figur { public abstract void draw(float x, float y, float d); } public class Quadrat implements Figur { int ROT, GRUEN, BLAU; public Quadrat(int ROT, int GRUEN, int BLAU) { //... } public void draw(float x, float y, float d) { //... } } public class Kreis implements Figur { int ROT, GRUEN, BLAU; public Kreis(int ROT, int GRUEN, int BLAU) { //... } public void draw(float x, float y, float d) { //... } } Figur[][] f = new Figur[10][10]; public void setup() { size(400,400); for(int i=0;i<f.length;i++) for(int k=0;k<f[i].length;k++) if((i*f.length+k)%2==0) f[i][k] = new Quadrat((i%2)*255,(k%2)*255,((i/2)%2)*255); else f[i][k] = new Kreis((i%2)*255,(k%2)*255,((i/2)%2)*255); } public void draw() { background(127); float d = height/(float)f.length; for(int i=0;i<f.length;i++) for(int k=0;k<f[i].length;k++) f[i][k].draw((float)k*d,(float)i*d,d); }
Code 0-6: Schnittstellen001

Bild 0-1: Screenshot zu Schnittstellen001.
Vervollständigen Sie in dem Quelltext die mit //... gekennzeichneten Stellen, so, dass obiges Muster entsteht.
Informatik -- Lehrveranstaltung vom 05.06.2024
Inhalte, siehe oben.
Themen:
|
"NOT-ÜBUNG" heute, wie soeben gemailt:
ja, es gab schon einmal früher ein Simulationsprogramm für das Räuber-Beute-Modell. Aber jetzt, heute spielt sich alles hier ab: http://www.kramann.info/10_Informatik1/01_day_by_day/08_LV_22_05_2024/index.php Es gibt drei Simulationen des Schwingers: Code 0-1 Code 0-3 Code 0-4 0-5 0-6 (gehören zusammen) Aufgabe: In jeder Variante soll das Schwingermodell durch das Räuber-Beute-Modell ersetzt werden und zum Laufen gebracht werden. Zusatzaufgabe: Sinnvolle Visualisierung als Balken, der Höhe sich dynamisch ändert in der dritten, objektorientierten Java-Variante. Angaben zum Räuber-Beute-Modell, siehe Formel 0-3 und Daten darüber.
Code 0-7: Übung
#include <iostream> using namespace std; int main(void) { double tmax=10.0; double dt=0.01; double t=0.0; double b0=100.0; double r0=10.0; double b=b0; double r=r0; int anzahl = 0; while(t<tmax)//Zählen, wieviele Datenelemente benötigt werden. { anzahl++; t+=dt; } double arrt[anzahl]; double arrb[anzahl]; double arrr[anzahl]; t=0.0; for(int i=0;i<anzahl;i++) { arrt[i]=t; arrb[i]=b; arrr[i]=r; double bneu = b + (b-0.01*b*r)*dt; double rneu = r + (-r+0.01*b*r)*dt; b=bneu; r=rneu; t+=dt; } //Ausgabe für Scilab: cout<<"t=["; for(int i=0;i<anzahl;i++) { cout<<arrt[i]; if(i<anzahl-1) cout<<","; } cout<<"];"<<endl; cout<<"B=["; for(int i=0;i<anzahl;i++) { cout<<arrb[i]; if(i<anzahl-1) cout<<","; } cout<<"];"<<endl; cout<<"R=["; for(int i=0;i<anzahl;i++) { cout<<arrr[i]; if(i<anzahl-1) cout<<","; } cout<<"];"<<endl; cout<<"plot(t,B,\'blu\',t,R,\'gre\');"<<endl; return 0; }
Code 0-8: Lösung zum ersten Teil.
TERMINAL: g++ -o beute0 beute0.cpp ./beute0 > sci.sce IN SCILAB (Beispiel, anpassen!) cd /home/linux/PLANUNG_YSOSE2024/INFORMATIK1/beute/ exec sci.sce
Code 0-9: Schritte zur Umsetzung.
