• Keine Ergebnisse gefunden

Beispiele ProjektwocheProjektwoche20102010SprechenSprechenSieSieD? D?

N/A
N/A
Protected

Academic year: 2021

Aktie "Beispiele ProjektwocheProjektwoche20102010SprechenSprechenSieSieD? D?"

Copied!
40
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Projektwoche

Projektwoche 2010 2010 Sprechen

Sprechen Sie Sie D? D?

Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm

Hochschule Harz

FB Automatisierung und Informatik

mwilhelm@hs-harz.de

http://mwilhelm.hs-harz.de

Raum 2.202

Tel. 03943 / 659 338

2 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Beispiele

1. Hello World

2. Datentypen, Grundstrukturen (if etc.) 3. printf

4. Funktionen 5. Felder 6. parameter 7. hashmap 8. Exception 9. File-IO

10. assert / Constraints 11. struct / class 12. Threads 13. Templates

(2)

3 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Kommentare

Zeilenweise //

Blockweise /* */

Blockweise /+ +/

4 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

1. Beispiel: Hello World

Installation der Programme

C:\daten\d\dm dmc.exe link.exe

C:\daten\d\dmd dmd.exe

C:\daten\d\prog

Aufruf der Oberfläche: DCONSOLE.EXE

Neue Datei STRG+N

Eintragen des Quellcodes

Übersetzen F8

Starten F9

(3)

5 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Pfad zum Compiler

6 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

import std.stdio;

int main(char[][] args) {

writefln("hello world");

return 0;

}

1. Beispiel: Hello World

• Speichern

• starten mit Taste F9

(4)

7 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Datentypen

bool Boolean

byte sign 8 Bit

ubyte unsigned 8 Bit

short sign 16 Bit

ushort unsigned 16 Bit

int signed 32 Bit

uint unsigned 32 Bit

long signed 64 Bit

ulong unsigned 64 Bit

char 8 Bit

wchar 16 Bit

dchar 32 Bit

char[] String

float single

double double

real Größter Typ

ifloat imaginär

idouble imaginär

ireal imaginär

cfloat komplexe Zahl

cdouble komplexe Zahl

creal komplexe Zahl

8 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Suffix für Datentypen

Integer-Familie:

L long

UL ulong

U uint

Nichts int

Floating-Point-Familie:

F float

L real !

Nichts double

Imaginär-Familie:

i Imaginär

(5)

9 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Casting

int code = cast(int) ch; // Cast von char nach int int code = cast(int) d; // Cast double nach int char ch = cast(char) (i+65); // Cast von int nach Char cast(char *) // Cast nach C-String

printf("Text: %s \n", cast(char *) sName ); // Cast nach C-String printf("Text: %.*s \n", (sName~\0) ); // Cast nach C-String printf("Text: %.*s \n", toStringz( sName ) ); // Cast nach C-String Das zweite Beispiel schneidet alle Nachkommastellen ab. Es rundet nicht ! Im Modul std.math existieren mehrere Varianten für die genaue Rundung einer Fließkommazahl zu einer Integerzahl.

10 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Konstanten

Beispiele:

• const int MaxDay=31;

• const int MaxMonth=12;

• const char yes='Y';

• const double MaxD=123.456;

(6)

11 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Initialisierung

Die Initialisierung sind nicht kompatibel mit C oder C++.

Übersicht:

Ganzahlige Datentypen werden mit 0 initialisiert.

• Floating Point mit NAN.

• Charakter mit 0xFF, letztes Zeichen, sieht aus wie ein Leerzeichen

• Felder werden mit dem jeweiligen Datentyp initialisiert.

In C/C++ werden keine Datentypen mit Werten initialisiert.

Java und C# initialisieren jeweils mit der Zahl Null. Die Sprache D wählt diesen Weg auch für alle ganzzahligen Datentypen. Fließkommazahlen werden aber mit NAN initialisiert.

12 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Deklaration

int x; // x ist ein int

int* x; // x ist ein Pointer zu einem int

int** x; // x ist ein Pointer zu einem int-Pointer int[] x; // x ist ein Feld von ints

int*[] x; // x ist ein Feld mit Pointer auf ints int[]* x; // x ist ein Pointer zu einem Feld von ints

int x = void; // Keine Initialisierung

int[] x=void; // x ist ein Feld von ints, ohne Initialisierung

(7)

13 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

2. Beispiele für Datentypen

bool Boolean

byte sign 8 Bit

ubyte unsigned 8 Bit

short sign 16 Bit

ushort unsigned 16 Bit

int signed 32 Bit

uint unsigned 32 Bit

long signed 64 Bit

ulong unsigned 64 Bit

char 8 Bit

wchar 16 Bit

dchar 32 Bit

float single

double double

real Größter Typ

ifloat imaginär

idouble imaginär

ireal imaginär

cfloat komplexe Zahl

cdouble komplexe Zahl

creal komplexe Zahl

14 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

import std.stdio;

int main(char[][] args) { int a, b, c, min, max;

// init

… // calc

writefln("Minimum:",min);

writefln("Maximum: ",max);

return 0;

}

2. Aufgabe:

Bestimmen des Min- und Maximums dreier Zahlen mittels if-Anweisung (int, double)

• Speichern

• starten mit Taste F9 Formate

• %d Decimal

• %f Floating %11.4f

• %c Char

• %s String

(8)

15 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

import std.stdio;

int main(char[][] args) { int a, b, c;

// init

… // lokales calc writefln("Summe: ",c);

c = summe1(….);

writefln("Summe: ",c);

return 0;

}

3. Aufgabe: Bestimmen der Summe zweier Zahlen mittels Funktionen

• Speichern

• starten mit Taste F9

summe

16 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

import std.stdio;

int main(char[][] args) { int a, b, c;

// init

… // lokales calc writefln("Summe: ",c);

c = summe1(….);

writefln("Summe: ",c);

summe2(a,b,c);

writefln("Summe: ",c);

return 0;

}

3. Aufgabe: Bestimmen der Summe zweier Zahlen mittels Funktionen

• Speichern

• starten mit Taste F9

summe

(9)

17 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

For-Schleifen

for( Zähler=Anfangswert; Zähler<Endwert; Zähler = Zähler +1) Weitere Optionen:

• break // Ende der Schleife

• continue // Verzeigt zum nächsten Durchgang

18 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

While-Schleifen

while (Bedingung) Anw1;

while (Bedingung) { Anw1;

}

while (Bedingung) { Anw1;

Anw2;

}

(10)

19 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Do-While-Schleifen

do

Anw1;

while (Bedingung)

do {

Anw1;

} while (Bedingung) do {

Anw1;

Anw2;

} while (Bedingung)

20 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Funktion: 2x3– 0.5x2+ 4x -8;

Bereich: von 0 bis 10 Schrittweite 0,5

f(0) -8

f(1) -2,5

Lösung: Integral: 5459,125

4. Aufgabe: Erstellen einer Wertetabelle und berechnen eines Integralwerts

integral

(11)

21 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

5. Aufgabe: Welche Zahlen sind durch 2 oder 3 ganzzahlig teilbar

mwst1

Eine For-Schleife in main berechnet den Teiler und gibt alle gültigen Zahlen mittels writefln aus

22 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

import std.cstream; // fuer din.readLine() import std.stdio; // fuer writef()/writefln() void main() {

char[] sName;

writef("Guten Tag, bitte geben Sie Ihren Namen ein: ");

sName = din.readLine();

writefln("Danke, dass Sie D benutzen, %s", sName);

// Pause

din.readLine();

return 0;

}

6. Aufgabe: Konsoleneingabe / Dos-Box

(12)

23 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? mwst1

7. Aufgabe: MWSt berechnen

Funktion erhält zwei Parameter:

a) Ein Zeichen für den Artikel b) Preis

Aufgabe: Berechnen der MWSt Eingabe: Über Tastatur

Für Zeichen a,d,f gilt 19%

Für Zeichen b,c,h gilt 7%

sonst gilt 25% // Sondersteuer

Mit if-Anweisungen !

24 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

switch ( Ausdruck) { case Wert1: Anw1;

break;

case Wert2: Anw2;

Anw3;

break;

case Wert3:

case Wert4: Anw4;

Anw5;

Break;

case Wert5: Anw6;

case Wert6: Anw7;

Anw8;

Break;

default: Anw9;

} // switch

Switch Anweisung

(13)

25 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

switch ( Ausdruck) { case Wert1: Anw1;

break;

case Wert2: Anw2;

Anw3;

break;

case Wert3:

case Wert4: Anw4;

Anw5;

Break;

case Wert5: Anw6;

Anw7;

Anw8, BREAK case Wert6: Anw7;

Anw8;

Break;

default: Anw9;

} // switch

Switch Anweisung

26 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? mwst1

Felder / Arrays

Arrays sind Container für mehrere Elemente Man kann diese unter einem Namen ansprechen Felder werden als Referenz übergeben (Parameter) Methode dup kopiert

Methode length liefert die Länge Methode sort sortiert

Default Initialialisierung:

Pointers werden mit null initialisiert.

Statische Felder werden mit den Default-Wert ihres Datentyps initialisiert.

Dynamische Felder haben am Anfang keine Elemente.

Assoziative Felder haben am Anfang keine Elemente.

Dynamische Felder: int[]p; p.length=100;

(14)

27 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? mwst1

Felder / Arrays

Drei Arten eines Feldes existieren:

int* p; Pointer auf Daten, à la C int[3] s; Statisches Feld

int[] a; Dynamisches Feld

28 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Felder / Arrays

// dynamische Felder von ints

int[] a; int a[];

// Feld mit 3 Felder mit jeweils Felder von 4 ints int[4][3] b; int[4] b[3]; int b[3][4];

// Dynamisches Feld von Feldern mit 5 ints

int[][5] c; int[] c[5]; int c[5][];

// Feld mit 3 Pointern nach einem dynamischen Feld mit ints int*[]*[3] d; int*[]* d[3]; int* (*d[3])[];

// Pointer zu einem dynamischen Feld mit ints

int[]* e; int (*e)[];

(15)

29 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Foreach-Schleifen

int [10] a;

foreach (int value; a) { writefln(a);

writefln("'%d", value);

}

double [10] d;

foreach (int i, double value; d) { writefln("%d %f", i, value);

}

foreach_reverse (int i, double value; d) { writefln("%d %f", i, value);

}

30 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? array1

8. Aufgabe: Felder mit i+1 initialisieren

int main (char[][] args) {

int a[10]; // Feld mit 10 Elementen int b[];

int c[];

a) mit einfacher For-Schleife das Feld a initialisieren Methode .length

b) Ausgabe mit foreach

c) Referenz kopieren b=a // Kontrollausgabe d) setzen von b[3] =55; // Kontrollausgabe e) Kopieren und Einzelfeld setzen

(16)

31 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? array2

9. Aufgabe: Felder mit i+1 initialisieren

int main (char[][] args) {

int a[10]; // Feld mit 10 Elementen int b[];

int c[];

a) Initialisieren durch eine Methode setFeld / initFeld b) Kontrollausgabe

32 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? array3

10. Aufgabe: Felder a[i] mit 2.2*i+1 initialisieren

int main (char[][] args) {

double a[10]; // Feld mit 10 Elementen double xm;

a) Initialisieren durch eine Methode initFeld b) Kontrollausgabe

c) Berechnen des Mittelwerts in einer Methode (void / Länge)

(17)

33 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? array4

11. Aufgabe: 3 Felder

int main (char[][] args) {

int a[10]; // Feld mit 10 Elementen int b[10];

int c[10];

a) Initialisieren der Felder a und b b) Kontrollausgabe

c) Berechnen einer Funktion in einer Methode Addition / Subtraktion

Multiplikation / Division Berechnen der Hypothenuse

Auswahl mittels switch / case per Parameter d) Ausgabe des Ergebnisfeldes c

34 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Hashmap-Felder

• Das Suchen eines bestimmten Wertes in einem großen unsortiertem Feld ist sehr aufwändig

• Abhilfe schafft die Verwendung von assoziativen Feldern

double[ char[] ] myhashfeld;

myhashfeld[ "Mueller" ] = 34.56;

myhashfeld[ "Schmidt" ] = 14.56;

myhashfeld[ "Schmitt" ] = 64.56;

writefln("Feldlaenge: %d",myhashfeld.length);

// Ausgabe

writefln("%s %f","Mueller",myhashfeld["Mueller"]);

writefln("%s %f","Schmidt",myhashfeld["Schmidt"]);

(18)

35 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

void insert(double[ char[] ] myhashfeld,char[] hash,double d) { myhashfeld[ hash ] = d;

writefln("Feldlaenge: %d",myhashfeld.length); // 1 }

int main (char[][] args) { double[ char[] ] myhashfeld;

insert(myhashfeld,"Mueller",34.56);

insert(myhashfeld,"Schmidt",14.56);

insert(myhashfeld,"Meier",24.56);

insert(myhashfeld,"Meyer",25.56);

insert(myhashfeld,"Schmitt",64.56);

insert(myhashfeld,"Pundt",94.56);

writefln("Feldlaenge: %d",myhashfeld.length);

// Ausgabe

print(myhashfeld, "Mueller"); // Error: ArrayBoundsError hash2(23) print(myhashfeld, "Meier");

print(myhashfeld, "Pundt");

return 0;

}

36 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Problem der Hashmap-Felder

■ Wird das Hashfeld in einer Methode definiert und benutzt, so gibt es keine Probleme

■ Die Hashmap wird nicht als Referenz übergeben

■ 1. Abhilfe: globale Feld

■ 2. Abhilfe: Klasse class CHashDouble { // Definition des Felds

void insert(char[] hash, double d) {

}

double get(char[] hash) { return …

}

void print(char[] hash) {

} }

(19)

37 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Exception

Fehler werden mit der Try-Catch-Anweisung abgefangen try {

Anweisungen }

catch(Exception e) {

writefln("catch %.*s\n", e.msg);

}

Hinweis:

ThrowStatement:

throw new Exception("Fehler in Modul beta");

38 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? exception1

12. Aufgabe: Exception

Einbau einer Exception:

int main (char[][] args) { int i,j;

j=0;

i=i/j;

return 0;

}

(20)

39 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Plausibilität

■ Wenn man Parameter in einer Funktion überprüfen will, so kann man dieses mit if-Anweisungen programmieren

■ In der Release-Version ist das aber nicht sehr optimal (Performance)

■ Deshalb gibt es in C das assert-Makro. Die darin defnierte Überprüfung wird nur im Debug-Modus kompiliert.

real a = 3.40483L; L ist dann maximales Floatingpoint Format real b;

b = 3.40483; // kein L, trotzdem nicht zum double konvertiert assert(a == b);

assert(a == 3.40483); // float Typ assert(a == 3.40483L); // real-Typ assert(a == 3.40483F);

double d = 3.40483; // Cast zum double Format assert(d != a); // double <> real, meistens

const double x = 3.40483; // Konstante wird nicht umgewandelt assert(x == a); // Prüfung okay

40 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

double pythagoras(double a, double b) in

{

assert(a > 0);

assert(b > 0);

}

out (result) {

assert( (result>a) && (result>b) );

assert( result*result == a*a+b*b ); // Problem }

body {

return cast(double)std.math.sqrt(cast(real) a*a+b*b);

}

Plausibilität: Beispiel

(21)

41 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

uint fakultaet(uint n) in

{

assert(n > 0);

}

out (result) {

assert( result>0 );

} body {

uint i, p;

p=1;

for (i=2; i<=n; i++) p*=i;

return p;

}

int main (char[][] args) { uint f;

f = fakultaet(33);

writefln("fakultaet : %d",f);

return 0;

}

Absturz bei n=34

constraint1.d

Plausibilität: Beispiel Fakultät

42 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? constraint3

13. Aufgabe: Pythagoras

Einbau einer Überprüfung im Programm constraint3.d

■ Überprüfen der Eingangswerte

■ Berechnen des Ergebnisses mit std.math.sqrt

■ Überprüfen des Ergebnisses, Formel des Pythagoras

(22)

43 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Parameterübergabe an einem Programm

■ Wie in C, Jave ect. Existiert ein Mechanismus, um Daten an ein startendes programm zu übermitteln

int main(char[][] args) {

writefln("hello world\n");

writefln("args.length = %d\n", args.length);

for (int i = 0; i < args.length; i++)

writefln("args[%d] = '%s'\n", i, args[i]);

return 0;

}

44 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? param2

14. Aufgabe: Parameter

a) mit der Funktion atoi bzw. atof kann man einen String in eine Zahl umwandeln: k=atoi("123");

args[i] zeigt auf den i-ten Parameter

der 0.te Parameter ist der Pfad mit dem Programm

b) Schreiben Sie ein Programm, welches drei Parameter einliest c) Falls weniger Parameter eingegeben wurden, gibt das

Programm eine Fehlermeldung aus d) 1. Parameter umwandeln in eine Zahl: a e) 2. Parameter umwandeln in eine Zahl: b

f) 3. Parameter zeigt an, welche Operation durchgeführt werden soll

g) 12 33 + 2 5 /

(23)

45 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

V:\D\bspnew>param2 33 44+

Anzahl der Parameter 3

Zu wenig Parameter, Beispiel 44 33 + V:\D\bspnew>param2 33 44 +

Anzahl der Parameter 4 Ergebnis: 77

V:\D\bspnew>param2 33 44 / Anzahl der Parameter 4 Ergebnis: 0

V:\D\bspnew>param2 133 44 / Anzahl der Parameter 4

Ergebnis: 3

Beispielergebnis

46 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

struct

■ Wenn man mehrere Variablen pro Datensatz speichern möchte, so kann man mehrere einzelne Variable/Felder verwenden

■ ODER man verwendet eine Struktur

■ Eine Struktur wird verwendet, wenn man Variablen zusammenfügt, die logisch zusammen gehören

■ Die Methode offsetof liefert die Anfangsadresse im struct struct mystruct {

int k;

double d;

char c;

}

void main() { mystruct d;

d.k=44;

d.d=44.444;

d.c='p';

writefln("d: %d %f %c\n", d.k, d.d, d.c);

}

(24)

47 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? array4

15. Aufgabe: Point struct

a) Definition einer Struktur point mit den Variablen double x und y b) Deklaration in main

c) Initialisierung P1(3/4) und P2(5/6) d) Berechnen Sie die Summe der Punkte e) Ausgabe der einzelnen Werte

f) Bestimmen der Speicherung mittels "point.x.offsetof"

struct mystruct { int k;

double d;

char c;

}

void main() { mystruct d;

d.k=44;

d.d=44.444;

d.c='p';

writefln("d: %d %f %c\n", d.k, d.d, d.c);

}

48 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

struct mystruct {

int x=3; // Init

ubyte b=11;

double t=123.54;

char[9] sStr;

long d=33;

}

int main (char[][] args) { mystruct st;

writefln(mystruct.x.offsetof ); // 0 writefln(mystruct.b.offsetof ); // 4 writefln(mystruct.t.offsetof ); // 8 writefln(mystruct.sStr.offsetof ); // 16

writefln(mystruct.d.offsetof ); // 32(9) 24(5) 40(21) return 0;

}

Aligment in einer structure

(25)

49 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Eigenschaften einer structure

Eigenschaft eines Wertes in einer Struktur:

Offset in Bytes pro Feld (siehe Beispiel).

Wichtig dabei: Man muss den Strukturnamen und nicht die Variable benutzen.

.offsetof

Die Daten der aktuellen Variablen werden hintereinander ausgegeben, ohne Trennzeichen .tupleof

Ausrichtung der Struktur. Richtet sich nach dem größten datentyp (Charakter=1 bis4, byte=1;

int=4, long=8, float=4, double=8, real=10 ) .alignof

Anzahl der Bytes .sizeof

50 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Klassen

■ Klassen sind "Erweiterungen" von Strukturen und den dazu gehörigen Methoden

■ In einer Klasse werden Variablen definiert

■ Mittels Methoden, Funktionen, kann man auf diese zugreifen bzw. man kann Funktionen definieren, die den Zustand des Objektes verändert.

■ Zugriff für Variablen: private package public export

class Cbsp1 { int a;

}

int main(char[][] args) { Cbsp1 A;

A = new Cbsp1();

A.a = 33;

writefln("a: %d\n",A.a);

return 0;

}

class1

(26)

51 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

class Cbsp2 { private

int a;

this() { a=22;

this(44); // demo }

this(int a) { this.a = a;

}

public int getA() { return a;

} }

52 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

class CPoint { private

double x;

double y;

this() { this(1,1);

}

this(double x, double y) { this.x = x;

this.y = y;

}

public double getX() { return this.x;

}

public double getY() { return this.y;

}

} // CPoint

int main(char[][] args) {

CPoint p1 = new CPoint(3,4);

CPoint p2 = new CPoint(5,6);

writefln("P1: x %f y: %f", p1.getX() , p1.getY() );

writefln("P2: x %f y: %f", p2.getX() , p2.getY() );

return 0;

}

(27)

53 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Klassenvererbung

■ Existieren mehrere Klassen, die Gemeinsamkeiten haben, so könnte man diese in einen "Stammbaum" darstellen

■ In einer Klasse werden Variablen defniert

■ Mittels Methoden, Funktionen, kann man auf diese zugreifen bzw. man kann Funktionen definieren, die den Zustand des Objektes verändert.

■ Zugriff für Variablen: private package public export

class Cbsp1 { int a;

}

int main(char[][] args) { Cbsp1 A;

A = new Cbsp1();

A.a = 33;

writefln("a: %d\n",A.a);

return 0;

}

class1

54 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? class3

16. Aufgabe: Klasse CPoint

a) Definition einer Klasse CPoint mit den Variablen double x und y b) Definitionen von Konstruktoren

c) Definitionen Methoden (get/set, getHypo) d) Deklaration in main

e) Initialisierung P1(3/4) und P2(5/6) f) Testen der Methoden

g) Berechnen Sie der Hypothenuse h) Ausgabe der Hypothenuse

(28)

55 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

class CFahrzeug { private

int _ps;

this() { this(0);

}

this(int ps) { _ps = ps;

}

public int getPS() { return _ps;

}

public void setPS(int ps) { _ps = ps;

}

} // Fahrzeug

// Abgeleitete Klasse class CPkw : CFahrzeug{

int _sitze;

this(int ps, int sitze) { _sitze = sitze;

super(ps);

}

public int getSitze () { return _sitze;

} // get_sitze

// set Methode fuer Variable _sitze public void setSitze (int sitze) {

_sitze=sitze;

} // set_sitze } // CPkw

class4

56 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

int main(char[][] args) {

CPkw p1 = new CPkw(123, 5);

writefln("PS: %d Sitze: %d\n", p1.getPS() , p1.getSitze() );

writefln("PS: %d Sitze: %d\n", p1._ps, p1._sitze );

return 0;

}

Datei "C:\Daten\D\bspnew\class4.d"

PS: 123 Sitze: 5 PS: 123 Sitze: 5 -- Fertig --

(29)

57 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Klassenvererbung

■ Plausibilitätskonstrollen werden üblicherweise in der set- Methode durchgeführt

■ D geht einen Schritt weiter. Es prüft bei jeder Änderung den Wert. Dazu gibt es den Abschnitt invariant

class Cbsp2 { private int a;

public void setA(int a) { this.a=a;

}

public void addN(int n) { this.a+=n;

}

public void calc() { a=−4; // negativ }

}

58 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

class CDatum { private int day;

private int hour;

this(int day, int hour) { this.day = day;

this.hour=hour;

}

public void addDays(int days) { this.day = this.day - days;

}

invariant {

assert(1 <= day && day <= 31);

assert(0 <= hour && hour < 24);

} }

int main (char[][] args) {

CDatum datum= new CDatum(30,5);

datum.day=41;

datum.addDays(3);

return 0;

}

(30)

59 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? file5

Datei Ein- und Ausgabe

Dateien können zeilenweise eingelesen und geschrieben werden

Dateien können binär eingelesen und geschrieben werden

File myFile;

myFile = new File();

myFile.create("test.bin2);

myFile.write(123);

myFile.write(123.45);

myFile.close();

File myFile;

int i;

double d;

myFile = new File("test.bin");

myFile.read(i); // out Parameter writefln("i: %d\n",i);

myFile.read(d); // out Parameter writrefln("d: %f\n",d);

myFile.close();

60 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? student1

17. Aufgabe: Klasse CStudent

a) Definition einer Klasse CStudent mit den Attributen: MatrNr, Name b) Definitionen von Konstruktoren c) Definitionen Methoden (get/set)

d) Definitionen Methoden (saveToFile, loadFromFile) e) Deklaration in main

f) Initialisierung std1(…..), std2(..) g) Testen der Methoden

h) Speichern und laden in zwei verschiedene Dateien student1.bin student2.bin

(31)

61 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? Student1/2

18. Aufgabe: Klasse CStudent

a) Definition einer Klasse CStudent

mit den Attributen: MatrNr, Name, Geburtsjahr, Ort b) Definitionen von Konstruktoren

c) Definitionen Methoden (get/set)

d) Definitionen Methoden (saveToFile, loadFromFile) e) Deklaration in main

f) Initialisierung std1(…..), std2(..) g) Testen der Methoden

h) Speichern von student1.bin

i) Laden von student1.bin student2.bin

62 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? Student1/2

19. Aufgabe: Klasse CStudent

a) Definition einer Klasse CStudent

mit den Attributen: MatrNr, Name, Geburtsjahr, Ort b) Definitionen von Konstruktoren

c) Definitionen Methoden (get/set)

d) Definitionen Methoden (saveToFile, loadFromFile) e) Deklaration in main

f) Initialisierung std1(…..), std1(..) g) Testen der Methoden

h) Speichern und laden in zwei verschiedene Dateien student1.bin student2.bin

(32)

63 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? student2

20. Aufgabe: Das Sieb des Eratosthenes

Prizahlen

a) Definition einer Klasse CStudent

mit den Attributen: MatrNr, Name, Geburtsjahr, Ort b) Definitionen von Konstruktoren

c) Definitionen Methoden (get/set)

d) Definitionen Methoden (saveToFile, loadFromFile) e) Deklaration in main

f) Initialisierung Std(…..) g) Testen der Methoden h) Speichern und laden

64 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

20. Aufgabe: Das Sieb des Eratosthenes

Primzahlen können über verschiedene Methoden berechnet werden:

■Testen für jede Zahl x, ob die Zahlen 1 bis sqrt(x)+1 echte Teiler sind

■Sieb des Erastosthenes - Feld anlegen

- alle bekommen den Wert true = Primzahl

T T T T T T T T T T T T T T F

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

(33)

65 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

int main(){

bool flags[24];

int i, prime, k, count;

count = 0;

// init flags for (……){

if (flags[i]) { prime = i;

while ( Bedingung ){

….

}

count += 1;

} // if } // for

writefln ("\n%d Anzahl der Primzahlen\n", count);

return 0;

}

66 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Threads

■ Threads sind die Basis für Multithreaded-Programme. Diese sind heute bei Computern mit Dual-Core-CPU wichtiger denn je.

■ Jeder Thread muss eine Instanz der Klasse Thread oder einer abgeleiteten Klasse sein.

■ Die Klasse Thread orientiert sich sehr an der Implementation in Java.

■ Das Prinzip von Threads ist, das die Arbeit auf mehrere gleichzeitig laufende Methoden verlagert wird

■ Modulname: std.thread

(34)

67 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? Thread2

import std.stdio;

import std.thread;

import std.random;

// mit Umleitung class CThread :Thread {

int nr;

this (int nr) { super();

this.nr = nr;

}

int run() {

for (int i=0; i<100; i++) { writefln("%d",nr);

} return 0;

} }

68 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D? Thread2

int main (char[][] args) {

CThread t1 = new CThread(1);

CThread t2 = new CThread(2);

t1.start();

t2.start();

t1.wait(); // notwendig t2.wait();

writefln("ende");

return 0;

}

Threads

Ergebnis:

Ausgabe von 1 und 2 In beliebiger Reihenfolge

(35)

69 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Threads: Summenberechnung

int summe;

class CThread :Thread { int nr;

this (int nr) { super();

this.nr = nr;

}

int run() {

for (int i=0; i<1000; i++) { int k=summe;

k=k+nr;

summe=k;

} return 0;

} }

int main (char[][] args) { CThread t1 = new CThread(1);

CThread t2 = new CThread(2);

summe=0;

t1.start();

t2.start();

t1.wait();

t2.wait();

writef("\nSumme (3000): %d", summe);

return 0;

}

70 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Problem der Threads

■ Die Threads haben Zugriff auf eine ungeschützte Variable

■ Race-Condition, Parkplatzproblem zweier Autos

■ Je nach Konstellation werden unterschiedliche Summen errechnet

Zeit- punkt

Thread A

(Einzahlung 100 €)

Kontostand Thread B

(Einzahlung 50 €)

1 200 € i = Kontostand

2 Prozesswechsel

3 i = Kontostand

4 Kontostand = i+100 € 300 €

5 Prozesswechsel

6 250 € Kontostand = i+50 €

Problem: Verlust einer Buchung

(36)

71 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

// schlechter int run() {

for (int i=0; i<1000; i++) { int k=summe;

k=k+nr;

pause() summe=k;

}

return 0;

}

// besser int run() {

for (int i=0; i<1000; i++) { summe+=nr;

}

return 0;

}

Problem der Threads: run-Methoden

72 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

class CSumme { int summe;

this() { summe=0;

}

void add(int nr) { summe+=nr;

} }

Problem der Threads

class CThread :Thread { int nr;

CSumme cs;

this (int nr, CSumme cs) { super();

this.nr = nr;

this.cs = cs;

}

int run() { // working cs.add(nr);

return 0;

} }

(37)

73 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

class CSumme { int summe;

this() { summe=0;

}

synchronized void add(int nr) { summe+=nr;

} }

Lösung des Problems der Threads

Hinweis:

Mit synchronized wird sichergestellt, dass nur ein Thread in diesen Bereich eintreten kann

74 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Beispiel:

Procedure Tausche

void change( int & a, int &b) { int h = a;

a = b;

b = h;

} //

void change( double & a, double &b) { double h = a;

a = b;

b = h;

} //

(38)

75 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Templates

• Templates sind Algorithmen, die den Quellcode beschreiben, aber keinen dazugehörigen Datentyp benutzen.

• Erst bei der Benutzung muss man den Datentyp angeben.

• Der Vorteil liegt in der einmaligen Beschreibung des Algorithmus. Unterschieden wird zwischen Funktions- und Klassentemplates.

76 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

int getMax(int a, int b) { if (a>b)

return a;

else return b;

}

Funktionstemplate Beispiel: Deklaration

float getMax(float a, float b) { if (a>b)

return a;

else return b;

}

T getMaxTemp(T) (T a, T b) { if (a>b)

return a;

else return b;

}

(39)

77 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

int i;

float f;

i = getMax(3,5);

writefln("getMax i %d",i);

f = getMax(3.0,5.0);

writefln("getMax f %f",f);

alias getMaxTemp!(int) getMi;

i = getMi(3,5);

writefln("getMaxTemp i %d",i);

alias getMaxTemp!(float) getMf;

f = getMf(3.55,5);

writefln("getMaxTemp f %f",f);

Funktionstemplate Beispiel: Benutzung

78 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

class TempClass1(T) {

T a;

this(T a) { this.a = a;

}

public T getA() { return a;

} }

Klassentemplate Beispiel: Deklaration

(40)

79 FB Automatisierung und Informatik: Projektwoche SoSe 2010, Sprechen Sie D?

Klassentemplate Beispiel: Benutzung

int main (char[][] args) {

alias TempClass1!(int) CI; // Class Int CI ci = new CI(5);

writefln("a: %d", ci.getA() );

alias TempClass1!(double) CD; // Class Double

CD cd = new CD(5.45433);

writefln("a: %f", cd.getA() );

return 0;

}

Referenzen

ÄHNLICHE DOKUMENTE

Erstellen Sie eine Funktion in Oracle, F_Upper, die den Parameter in Großbuchstaben umwandeln. CREATE OR REPLACE FUNCTION F_Upper( name in char) RETURN

public int getColumnCount() { return AnzCols; } public int getRowCount() { return AnzRows; } public Object getValueAt(int row, int column) {.

writeInt (Schreiben einer 32-Bit Vorzeichenzahl) writeLong (Schreiben einer 64-Bit Vorzeichenzahl) writeShort (Schreiben einer 16-Bit Vorzeichenzahl) writeUTF (Schreiben eines

Was passiert, wenn JUnit die Tests dieser Klasse ausführt. • Das Test-Framework durchsucht die Testklasse mit Hilfe des Reflection API nach öffentlichen Methoden, die

Statt alle möglichen Eigenschaften in einer komplexen, anpassbaren Klasse vorherzusehen, wird eine einfache Klasse definiert und diese inkrementell mit.

Abs Returns the absolute value of a specified number. Acos Returns the angle whose cosine is the specified number. Asin Returns the angle whose sine is the specified number. Atan

FB Automatisierung und Informatik: Windows Presentation Foundation.. Window

FB Automatisierung und Informatik: Windows Presentation Foundation.. Window