Informatik -- Lehrveranstaltung vom 03.06.2024
(EN google-translate)
(PL google-translate)
Themen
|
1. Vererbung
Allgemeines: 30_Informatik3/06_Vererbung
Beispiel als UML-Klassendiagramm dargestellt: 30_Informatik3/06_Vererbung/01_MesswerteUML
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.
Basisklasse in C++: 30_Informatik3/06_Vererbung/02_MesswerteProgramm
Erbende Klasse in C++: 30_Informatik3/06_Vererbung/03_VererbungsProgramm
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
Interfaces (Schnittstellen), ein Beispiel zur Einführung: 30_Informatik3/15_Rasterlayout/02_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.
Schwinger101BEUTE.zip -- Lösung zum dritten Teil.