Grundlagen der Programmierung. Worum geht es? 1. Einführung. Grundlagen der Programmierung Prof. H. Mössenböck. Programm = Daten + Befehle.

Größe: px
Ab Seite anzeigen:

Download "Grundlagen der Programmierung. Worum geht es? 1. Einführung. Grundlagen der Programmierung Prof. H. Mössenböck. Programm = Daten + Befehle."

Transkript

1 Grundlgen der Progrmmierung Prof. Dr. Hnspeter Mössenböck Ziel Inhlte Litertur Einfche Progrmme in Jv schreiben können Anweisungen und Dtenstrukturen Grundlgen der Objektorientierung Progrmmentwurf Rekursion Fehlerbehndlung H.Mössenböck: Sprechen Sie Jv? dpunkt.verlg, 00 H.Mössenböck: Sprechen Sie Jv?. erweiterte Auflge, dpunkt.verlg, 00 Klusur Di , 8:00-9:00 Worum geht es? Grundlgen der Progrmmierung Prof. H. Mössenböck 1. Einführung Progrmmieren ein Problem so exkt beschreiben, dss es ein Computer lösen knn kretive Tätigkeit Ingenieurtätigkeit Nur wenige Leute können gut progrmmieren Progrmm = Dten + Befehle

2 Dten und Befehle Progrmmerstellung Dten Menge dressierbrer Speicherzellen Problem x y z 17 1 Nme Wert Dten sind binär gespeichert (z.b. 17 = 10001) Binärspeicherung ist universell (Zhlen, Texte, Bilder, Ton, ) 1 Byte = 8 Bit 1 Wort = Byte (mnchml Byte) Mensch Spezifiktion Algorithmus Aufgbenstellung Lösungsverfhren Befehle Opertionen mit den Speicherzellen Progrmm Codiertes Lösungsverfhren Mschinensprche ACC x ACC ACC + y z ACC // Lde Zelle x // Addiere Zelle y // Speichere Ergebnis in Zelle z Hochsprche z = x + y; Compiler Lder Mschinenprogrmm 6 Algorithmus Schrittweises, präzises Verfhren zur Lösung eines Problems Nme Summiere Zhlen von 1 bis mx ( mx, sum) 1. sum 0. zhl 1. Wiederhole, solnge zhl mx.1 sum sum + zhl. zhl zhl + 1 Prmeter Folge von Schritten Vriblen Sind bennnte Behälter für Werte x y 99 Können ihren Wert ändern x x x Hben einen Dtentyp = Menge erlubter Werte Vriblentyp Werte Progrmm = Beschreibung eines Algorithmus in einer Progrmmiersprche Zhl Zeichen 17 '' 'x' Typ Form -in eine Zhlenvrible pssen nur Zhlen - in eine Zeichenvrible pssen nur Zeichen 7 8

3 Anweisungen Wertzuweisung Anweisungen Auswhl (uch Verzweigung, Abfrge, Selektion) Vrible x x + 1 Ausdruck 1. werte Ausdruck us. weise seinen Wert der Vriblen zu j x < y? n x y min x min y Anweisungsfolge (uch Sequenz) min = Minimum von x und y "Ablufdigrmm" x y z x + y x =, y =, z = 7 Assertion Assertion (Zusicherung) Aussge über den Zustnd des Algorithmus n einer bestimmten Stelle 9 10 Anweisungen Beispiel: Vertuschen zweier Vribleninhlte Wiederholung (uch Schleife, Itertion) Swp ( x, y) Schreibtischtest n 0 x > 1? j n x x / n n + 1 n 0 x > 1 x x / n n + 1 h x x y y h x y h x 1 n = log x 0 Alterntive Drstellung x 1 n = log x

4 Beispiel: Mximum dreier Zhlen bestimmen Mx (, b, c, mx) Beispiel: Euklidscher Algorithmus Berechnet den größten gemeinsmen Teiler zweier Zhlen x und y j > b? n b j n j n > c? b > c? c > b b c mx mx c mx b mx c GGT ( x, y, ggt) rest Rest von x / y rest 0 x y y rest rest Rest von x / y ggt y rest = 0 Schreibtischtest x y rest Wrum funktioniert dieser Algorithmus? (ggt teilt x) & (ggt teilt y) x = i*ggt, y = j*ggt, (x-y) = (i-j)*ggt ggt teilt (x - y) ggt teilt (x - q*y) ggt teilt rest GGT(x, y) = GGT(y, rest) 1 1 Beispiel: Qudrtwurzel von x berechnen Beschreibung von Progrmmiersprchen 1.. Näherung: root x (/ + root) / x / root SqureRoot ( x, root) root x / x / root 0 * root = x root * root = x root (root + ) / x / root * root = x root * root = x & = root root * root = x root Schreibtischtest x root Kommzhlen sind meist nicht exkt gleich dher besser -root > x Syntx Regeln, nch denen Sätze gebut werden dürfen z.b.: Zuweisung = Vrible " " Ausdruck. Semntik Bedeutung der Sätze z.b.: werte Ausdruck us und weise ihn der Vriblen zu Grmmtik Menge von Syntxregeln z.b. Grmmtik der gnzen Zhlen Ziffer = "0" "1" "" "" "" "" "6" "7" "8" "9". Zhl = Ziffer {Ziffer. Ziffer Zhl Ziffer 1 16

5 EBNF (Erweiterte Bckus-Nur-Form) Metzeichen Bedeutung Beispiel beschreibt =. ( ) [ ] { trennt Regelseiten schließt Regel b trennt Alterntiven klmmert Alterntiven whlweises Vorkommen 0..n-mliges Vorkommen A = x y z. x y (x y) z [x] y {x y x, y xz, yz xy, y y, xy, xxy, xxxy, Grundlgen der Progrmmierung Prof. H. Mössenböck. Einfche Progrmme Beispiele Grmmtik der Gleitkommzhlen Zhl = Ziffer {Ziffer. Gleitkommzhl = Zhl "." Zhl ["E" ["+" "-"] Zhl]. Grmmtik der If-Anweisung IfAnweisung = "if" "(" Ausdruck ")" Anweisung ["else" Anweisung]. 17 Grundsymbole Nmen bezeichnen Vriblen, Typen, in einem Progrmm - bestehen us Buchstben, Ziffern und "_" - beginnen mit Buchstben - beliebig lng - Groß-/Kleinschreibung signifiknt Schlüsselwörter -heben Progrmmteile hervor -dürfen nicht ls Nmen verwendet werden Zhlen - gnze Zhlen (deziml oder hexdeziml) -Gleitkommzhlen Zeichketten - beliebige Zeichen zwischen Hochkomms - dürfen nicht über Zeilengrenzen gehen - " in der Zeichenkette wird ls \" geschrieben x x17 myvr my_vr if while 76 0x1A.1 deziml 1*16 +10*16 1 +*16 0 Gleitkommzhl " simple string" "sie sgte \"Hllo\"" Vriblendeklrtionen Jede Vrible muss vor ihrer Verwendung deklriert werden - mcht den Nmen und den Typ der Vriblen beknnt - Compiler reserviert Speicherpltz für die Vrible int x; short, b; Gnzzhlige Typen deklriert eine Vrible x vom Typ int (integer) deklriert Vriblen und b vom Typ short (short integer) byte 8-Bit-Zhl ( ) short 16-Bit-Zhl ( ) int -Bit-Zhl ( ) long 6-Bit-Zhl Initilisierungen int x = 100; short = 0, b = 1; deklriert int-vrible x; weist ihr den Anfngswert 100 zu deklriert short-vriblen und b mit Anfngswerten

6 Konstntendeklrtionen Initilisierte "Vriblen", deren Wert mn nicht mehr ändern knn sttic finl int mx = 100; Zweck - bessere Lesbrkeit mx ist lesbrer ls bessere Wrtbrkeit wenn die Konstnte mehrmls vorkommt und geändert werden muss, dnn muss ds nur n 1 Stelle erfolgen Kommentre Geben Erläuterungen zum Progrmm Zeilenendekommentre - beginnen mit // - gehen bis zum Zeilenende Klmmerkommentre - durch /* */ begrenzt - können über mehrere Zeilen gehen - dürfen nichtgeschchtelt werden - oft zum "Auskommentieren" von Progrmmteilen int sum; // totl sles /* Ds ist ein längerer Kommentr, der über mehrere Zeilen geht */ Konstntendeklrtion muss uf Klssenebene stehen (s. später) Sinnvoll kommentieren! - lles kommentieren, ws Erklärung bedrf - sttt unklres Progrmm mit Kommentr, besser klres Progrmm ohne Kommentr - nicht kommentieren, ws ohnehin schon im Progrmm steht; folgendes ist z.b. unsinnig int sum; // Summe Sprche in Kommentren und Nmen Deutsch + einfcher Englisch + meist kürzer + psst besser zu den englischen Schlüsselwörtern (if, while, ) + Progrmm knn interntionl verteilt werden (z.b. über ds Web) Jedenflls: Deutsch und Englisch nicht mischen!! Nmenswhl für Vriblen und Konstnten Einige Tipps lesbre ber nicht zu lnge Nmen z.b. sum, vlue Hilfsvriblen, die mn nur über kurze Strecken brucht, eher kurz: z.b. i, j, x Vriblen, die mn im gnzen Progrmm brucht, eher länger: z.b. inputtext mit Kleinbuchstben beginnen, Worttrennung durch Großbuchstben oder "_" z.b. inputtext, input_text Englisch oder Deutsch? 6 7

7 Zuweisungen x = y + 1 ; Vrible Ausdruck 1. berechne den Ausdruck. speichere seinen Wert in der Vriblen Arithmetische Ausdrücke Vereinfchte Grmmtik Expr = Opernd {BinryOpertor Opernd. Opernd = [UnryOpertor] ( identifier number "(" Expr ")" ). Bedingung: linke und rechte Seite müssen zuweisungskomptibel sein - müssen dieselben Typen hben, oder - Typ links Typ rechts Beispiele int i, j; short s; byte b; i = j; // ok: derselbe Typ Hierrchie der gnzzhligen Typen i = 00; // ok (Zhlkonstnten sind int) b = 00; // flsch: 00 psst nicht in byte long int short byte i = s; // ok s = i; // flsch Sttische Typenprüfung: Compiler prüft: - dss Vriblen nur erlubte Werte enthlten - dss uf Werte nur erlubte Opertionen usgeführt werden 8 Binäre Opertoren + Addition - Subtrktion * Multipliktion / Division, Ergebnis gnzzhlig / = 1 (-)/ = -1 /(-) = -1 (-)/(-) = 1 % Modulo (Divisionsrest) % = 1 (-)% = -1 %(-) = 1 (-)/(-) = -1 Unäre Opertoren + Identität (+x = x) - Vorzeichenumkehr 9 Typregeln in rithm. Ausdrücken Vorrngregeln - Punktrechnung (*, /, %) vor Strichrechnung (+, -) - Opertoren uf gleicher Stufe werden von links nch rechts usgewertet ( + b + c) - Unäre Opertoren binden stärker ls binäre z.b.: - * + ergibt - Increment und Decrement Vriblenzugriff kombiniert mit Addition/Subtrktion x++ nimmt den Wert von x und erhöht x nschließend um 1 ++x erhöht x um 1 und nimmt nschließend den erhöhten Wert x-- nimmt den Wert von x und erniedrigt x nschließend um 1 --x erniedrigt x um 1 und nimmt nschließend den erniedrigten Wert Typregeln Operndentypen Ergebnistyp byte, short, int, long - wenn mindestens 1 Opernd long ist long - sonst int Beispiele x = 1; y = x++ * ; // x =, y = entspricht: y = x * ; x = x + 1; x = 1; y = ++x * ; // x =, y = 6 entspricht: x = x + 1; y = x * ; Beispiele short s; int i; long x; x = x + i; // long i = s + 1; // int (1 ist vom Typ int) s = (short)(s + 1); // Typumwndlung nötig Typumwndlung (type cst) (type)expression - wndelt Typ von expression in type um - dbei knn etws bgeschnitten werden i Knn uch ls eigenständige Anweisung verwendet werden x = 1; x++; // x = entspricht: x = x + 1; Drf nur uf Vriblen ngewendet werden (nicht uf Ausdrücke) y = (x + 1)++; // flsch! (short)i 10 11

8 Multipliktion/Division mit Zweierpotenzen Zuweisungsopertoren Mit Shift-Opertionen effizient implementierbr Multipliktion x * x * x * 8 x * 16 x << 1 x << x << x << x / x / x / 8 x / 16 Division x >> 1 x >> x >> x >> Division nur bei positiven Zhlen durch Shift ersetzbr Arithmetischen Opertionen lssen sich mit Zuweisung kombinieren += -= *= /= %= Kurzform x += y; x -= y; x *= y; x /= y; x %= y; Lngform x = x + y; x = x - y; x = x * y; x = x / y; x = x % y; Beispiele x = ; x = -; x = 1; Sprt Schreibrbeit, ist ber nicht schneller ls die Lngform x = x << ; // 1 x = x << 1; // -6 x = x >> ; // Eingbe und Ausgbe von Werten Eingbe Eingbe von der Tsttur Ausgbe uf den Bildschirm Progrmm Eingbe von einer Dtei Ausgbe uf eine Dtei int x = In.redInt(); // liest eine Zhl vom Eingbestrom if (In.done()) // liefert true oder flse, je nchdem, ob Lesen erfolgreich wr In.open("MyFile.txt"); // öffnet Dtei ls neuen Eingbestrom In.close(); // schließt Dtei und kehrt zum lten Eingbestrom zurück Ausgbe Out.print(x); // gibt x uf dem Ausgbestrom us (x knn von bel. Typ sein) Out.println(x); // gibt x us und beginnt eine neue Zeile Out.open("MyFile.txt"); // öffnet Dtei ls neuen Ausgbestrom Out.close(); // schließt Dtei und kehrt zum lten Ausgbestrom zurück Besonderheiten zur Eingbe Eingbe von Tsttur Eintippen von: füllt Lesepuffer Progrmm: int x = In.redInt(); // liest 1 int y = In.redInt(); // liest 100 int z = In.redInt(); // blockiert, bis Lesepuffer wieder gefüllt ist Ende der Eingbe: Eingbe von Strg-Z in leere Zeile Eingbe von Dtei Return-Tste kein Lesepuffer, In.redInt() liest direkt von der Dtei Ende der Eingbe wird utomtisch erknnt (kein Strg-Z nötig) 1 1

9 Grundstruktur von Jv-Progrmmen Übersetzen und Ausführen mit JDK clss ProgrmNme { Beispiel public sttic void min (String[] rg) { // Deklrtionen // Anweisungen Text muss in einer Dtei nmens ProgrmNme.jv stehen Übersetzen C:\> cd MySmples C:\MySmples> jvc Smple.jv Ausführen C:\MySmples> jv Smple Geben Sie Zhlen ein: Summe = 7 wechselt ins Verzeichnis mit der Quelldtei erzeugt Dtei Smple.clss ruft min-methode der Klsse Smple uf Eingbe mit Return-Tste bschließen clss Smple { public sttic void min (String[] rg) { Out.print("Geben Sie Zhlen ein: "); int = In.redInt(); int b = In.redInt(); Out.print("Summe = "); Out.println( + b); Text steht in Dtei Smple.jv If-Anweisung Grundlgen der Progrmmierung Prof. H. Mössenböck n if (n > 0) x = x / n; ohne else-zweig n > 0? j x x / n. Verzweigungen j x > y? n mx x mx y if (x > y) mx = x; else mx = y; mit else-zweig Syntx IfSttement = "if" "(" Expression ")" Sttement ["else" Sttement].

10 Anweisungsblöcke Wenn if-zweig oder else-zweig us mehr ls 1 Anweisung bestehen, müssen sie durch { geklmmert werden. Sttement = Assignment IfSttement Block. Block = "{" {Sttement "". Beispiel if (x < 0) { negnumbers++; Out.print(-x); else { posnumbers++; Out.print(x); Einrückungen erhöhen die Lesbrkeit (mchen Progrmmstruktur besser sichtbr) Einrückungstiefe: 1 Tbultor oder Leerzeichen if (n!= 0) x = x / n; if (x > y) mx = x; else mx = y; if (x < 0) { negnumbers++; Out.print(-x); else { posnumbers++; Out.print(x); Kurze If-Anweisungen können uch in einer Zeile geschrieben werden if (n!= 0) x = x / n; if (x > y) mx = x; else mx = y; Dngling Else if ( > b) if (!= 0) mx = ; else mx = b; Mehrdeutigkeit! Zu welchem if gehört ds else? if ( > b) if (!= 0) mx = ; else mx = b; Regel: else gehört immer zum unmittelbr vorusgegngenen if. Wenn mn ds nicht will, muss mn die Anweisung so schreiben: if ( > b) { if (!= 0) mx = ; else mx = b; Vergleichsopertoren Vergleich zweier Werte liefert whr (true) oder flsch (flse) ==!= > < >= <= Bedeutung gleich ungleich größer kleiner größer oder gleich kleiner oder gleich Beispiel x == x!= y > x+1 < 0 x <= y x >= y Wird z.b. in If-Anweisung verwendet if (x == 0) Out.println("x is zero"); Achtung: "=" ist in Jv kein Vergleich, sondern eine Zuweisung if (x = 0) Out.println("x is zero"); // Compiler meldet einen Fehler! 6

11 Zusmmengesetzte Vergleiche Kurzschlussuswertung && Und-Verknüpfung x true true flse flse y true flse true flse x && y true flse flse flse Oder-Verknüpfung x true true flse flse y true flse true flse x y true true true flse! Nicht-Verknüpfung x true flse!x flse true Zusmmengesetzter Vergleich wird bgebrochen, sobld Ergebnis feststeht if (!= 0 && b / > 0 ) x = 0; wenn flse, ist gesmter Ausdruck flse äquivlent zu if (!= 0) if (b / > 0) x = 0; Beispiel if (x >= 0 && x <= 10 x >= 100 && x <= 110) y = x; Vorrngregeln if ( == 0 b / > 0 ) x = 1; wenn true, ist gesmter Ausdruck true if ( == 0) x = 1; else if (b / > 0) x = 1;! bindet stärker ls && && bindet stärker ls Vorrngregeln können durch Klmmerung umgngen werden: if (x > 0 && (y == 1 y == 7)) 7 8 Dtentyp boolen Dtentyp wie int mit den beiden Werten true und flse Beispiele boolen p, q; p = flse; q = x > 0; p = p q && x < 10; Bechte nch George Boole: Mthemtiker, Jeder Vergleich liefert einen Wert vom Typ boolen Boolesche Werte können mit &&, und! verknüpft werden Boolesche Werte können in boolen-vriblen bgespeichert werden ("flgs") Nmen für boolen-vriblen sollten mit Adjektiv beginnen: equl, full Assertionen bei If-Anweisungen if (condition) // condition else //! condition Beispiel: Mximum dreier Zhlen berechnen diese Assertion sollte mn immer hinschreiben oder zumindest im Kopf bilden int, b, c, mx; = In.redInt(); b = In.redInt(); c = In.redInt(); if ( > b) /* >b */ if ( > c) /* >b && >c */ mx = ; else /* >b && c>= */ mx = c; else /* b>= */ if (b > c) /* b>= && b>c */ mx = b; else /* b>= && c>=b */ mx = c; Out.println(mx); 9 10

12 Progrmmvergleich Welches der beiden Progrmme ist besser? if ( > b) if ( > c) mx = ; else mx = c; else if (b > c) mx = b; else mx = c; Ws heißt "besser"? Kürze: ds. Progrmm ist kürzer mx = ; if (b > mx) mx = b; if (c > mx) mx = c; Effizienz: - 1. Progrmm brucht immer Vergleiche und 1 Zuweisung -. Progrmm brucht immer Vergleiche und im Schnitt Zuweisungen Lesbrkeit? Negtion zusmmengesetzter Ausdrücke Regeln von DeMorgn! ( && b)!! b! ( b)! &&! b Diese Regeln helfen beim Bilden von Assertionen if (x >= 0 && x < 10) { else { // x < 0 x >= 10 Augustus De Morgn, britischer Mthemtiker, Erweiterbrkeit? 11 1 Switch-Anweisung Mehrwegverzweigung month In Jv 1,,,7,8,10,1,6,9,11 sonst dys 1 dys 0 dys 8 error switch (month) { cse 1: cse : cse : cse 7: cse 8: cse 10: cse 1: dys = 1; brek; cse : cse 6: cse 9: cse 11: dys= 0; brek; cse : dys = 8; brek; defult: Out.println("error"); 1 Semntik der Switch-Anweisung switch (month) { cse 1: cse : cse : cse 7: cse 8: cse 10: cse 1: dys = 1; brek; cse : cse 6: cse 9: cse 11: dys= 0; brek; cse : dys = 8; brek; defult: Out.println("error"); Semntik Switch-Ausdruck 1. berechne Switch-Ausdruck. springe zur pssenden cse-mrke - wenn keine psst, springe zu defult - wenn kein defult ngegeben, springe ns Ende der Switch-Anweisung Bedingungen Brek-Anweisung springt ns Ende der Switch-Anweisung wenn brek fehlt, läuft Progrmm über nächste cse-mrke weiter (häufige Fehlerursche!!) 1. switch-ausdruck muss gnzzhlig oder chr sein. cse-mrken müssen Konstnten sein. ihr Typ muss zum Typ des switch-ausdrucks pssen. cse-mrken müssen voneinnder verschieden sein 1

13 Syntx der Switch-Anweisung Unterschied zwischen If und Switch Sttement = Assignment IfSttement SwitchSttement Block. SwitchSttement = "switch" "(" Expression ")" "{" {LbelSeq SttementSeq "". LbelSeq = Lbel {Lbel. SttementSeq = Sttement {Sttement. Lbel = "cse" ConstntExpression ":" "defult" ":". if (month==1 month== month== month==7 month==8 month==10 month==1) dys = 1; else if (month== month==6 month==9 month==11) dys = 0; else if (month==) dys = 8; else Out.println("error"); switch (month) { cse 1: cse : cse : cse 7: cse 8: cse 10: cse 1: dys = 1; brek; cse : cse 6: cse 9: cse 11: dys= 0; brek; cse : dys = 8; brek; defult: Out.println("error"); 1 prüft Bedingungen sequentiell month benutzt Sprungtbelle 1 dys = 1; dys = 8; 6 dys = 0; defult error 16 While-Schleife Führt eine Anweisungsfolge us, solnge eine bestimmte Bedingung gilt Grundlgen der Progrmmierung Prof. H. Mössenböck. Schleifen i 1 sum 0 i n sum sum + i i i + 1 i = 1; sum = 0; while ( i <= n ) { sum = sum + i; i = i + 1; Schleifenbedingung Schleifenrumpf Syntx Sttement = Assignment IfSttement SwitchSttement WhileSttement Block. WhileSttement = "while" "(" Expression ")" Sttement. Wenn Schleifenrumpf us mehreren Anweisungen besteht, muss er mit { geklmmert werden.

14 Beispiel Assertionen bei Schleifen Aufgbe: Zhlenfolge lesen und Histogrmm usgeben Eingbe: Ausgbe: *** ** ***** clss Histogrm { public sttic void min (String[] rg) { int i = In.redInt(); while (In.done()) { int j = 1; while (j <= i ) {Out.print("*"); j++; Out.println(); i = In.redInt(); liest die Zhlenfolge gibt i Sterne us Trivile Assertionen Aussgen, die sich us der Schleifenbedingung ergeben i = 1; sum = 0; while (i <= n) { /* i <= n */ sum = sum + i; i = i + 1; /* i > n */ Schleifeninvrinte Aussge über ds berechnete Ergebnis, die in jedem Schleifendurchluf gleich bleibt i = 1; sum = 0; while (i <= n) { /* i <= n */ /* sum == Summe(1..i-1) */ sum = sum + i; i = i + 1; /* i > n */ sollte mn immer hinschreiben oder zumindest im Kopf bilden Verifiktion der Schleife Do-While-Schleife "Durchdrücken" der Invrinte durch die Anweisungen des Schleifenrumpfs i = 1; sum = 0; while (i <= n) { /* sum == Summe(1..i-1) */ sum = sum + i; /* sum == Summe(1..i) */ i = i + 1; /* sum == Summe(1..i-1) */ sum' == sum + i sum == sum' - i == Summe(1..i-1) sum' == Summe(1..i) i' == i + 1 i == i' - 1 sum == Summe(1..i'-1) /* sum == Summe(1..i-1) && i == n+1 sum == Summe(1..n) */ Termintion der Schleife muss uch noch bewiesen werden: i wird in jedem Durchluf erhöht und ist mit n beschränkt Abbruchbedingung wird m Ende der Schleife geprüft Beispiel: Ausgbe der Ziffern einer Zhl in umgekehrter Reihenfolge Syntx n In.redInt() Out.print(n % 10) n n / 10 j n > 0? n int n = In.redInt(); do { Out.print(n % 10); n = n / 10; while ( n > 0 ); Sttement = Assignment IfSttement WhileSttement DoWhileSttement Block. DoWhileSttement = "do" Sttement "while" "(" Expression ")" ";". Schreibtischtest n n % Wenn Schleifenrumpf us mehreren Anweisungen besteht, muss er mit { geklmmert werden. 0 6

15 Do-While-Schleife Wrum knn mn dieses Beispiel nicht mit einer While-Schleife lösen? For-Schleife Flls die Anzhl der Schleifendurchläufe im vorus beknnt ist int n = In.redInt(); while (n > 0) { Out.print(n % 10); n = n / 10; "Abweisschleife" sum = 0; for ( i = 1 ; i <= n ; i++ ) sum = sum + i; Kurzform für 1) Initilisierung der Lufvriblen ) Schleifenbedingung ) Ändern der Lufvriblen Weil ds für n == 0 die flsche Ausgbe liefern würde. Die Schleife muss mindestens einml durchlufen werden, dher : int n = In.redInt(); do { Out.print(n % 10); n = n / 10; while (n > 0); "Durchlufschleife" sum = 0; i = 1; while ( i <= n ) { sum = sum + i; i++; 7 8 Syntx der For-Schleife Beispiel: Multipliktionstbelle drucken ForSttement = "for" "(" [ForInit] ";" [Expression] ";" [ForUpdte] ")" Sttement. ForInit = Assignment {"," Assignment Type VrDecl {"," VrDecl. ForUpdte = Assignment {"," Assignment. Beispiele for (i = 0; i < n; i++) for (i = 10; i > 0; i--) for (int i = 0; i <= n; i = i + 1) for (int i = 0, j = 0; i < n && j < m; i = i + 1, j = j + ) for (;;) clss PrintMulTb { public sttic void min (String[] rg) { int n = In.redInt(); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) Out.print(i * j + " "); Out.println(); Schreibtischtest für n == i j

16 Abbruch von Schleifen Beispiel: Summieren mit Fehlerbbruch int sum = 0; brek verlässt die Schleife, in der int x = In.redInt(); es enthlten ist (while, do, for) while (In.done()) { sum = sum + x; if (sum > 1000) {Out.println("zu gross"); brek; x = In.redInt(); Schleifenbbruch mit brek möglichst vermeiden: schwer zu verifizieren. Meist lässt sich dsselbe mit while ebenflls usdrücken: int sum = 0; int x = In.redInt(); while (In.done() && sum <= 1000) { sum = sum + x; if (sum <= 1000) x = In.redInt(); //! In.done() sum > 1000 if (sum > 1000) Out.println("zu gross"); 11 Abbruch äußerer Schleifen Beispiel outer: for (;;) { for (;;) { if () brek; else brek outer; // Mrke! // Endlosschleife! // verlässt innere Schleife // verlässt äußere Schleife Wnn ist ein Schleifenbbruch mit brek vertretbr? bei Abbruch wegen Fehlern bei mehreren Aussprüngen n verschiedenen Stellen der Schleife bei echten Endlosschleifen (z.b. in Echtzeitsystemen) 1 Vergleich der Schleifenrten Progrmm-Muster E? S S1 E? Wie denken Progrmmierexperten? nicht in einzelnen Anweisungen sondern in größeren Progrmm-Mustern S E? S Muster = Schem zur Lösung häufiger Aufgben Abweisschleife while (E) S for (I; E; U) S Durchlufschleife do S while (E) llgemeine Schleife for (;;) { S1; if (E) brek; S; Experten benutzen Muster intuitiv - z.b. Stellungen im Schchspiel - z.b. Redewendungen in Geschäftsbriefen lösen Aufgben in Anlogie zu beknnten Aufgben Frge: Ws sind typische Muster in der Progrmmierung? 1 1

17 Zusmmensetzen von Progrmmen us Mustern Beispiel: Berechnung des Mittelwerts einer Zhlenfolge Einlese-Muster int x = In.redInt(); while (In.done()) { x = In.redInt(); Summierungs-Muster int sum = 0; while () { sum = sum + x; Mittelwert-Berechnung flot vg = (flot)sum / n; Zähl-Muster int n = 0; while () { n++; Prüf-Muster if (n!= 0) else Out.println("error"); Ausgbe Out.println("vg = " + vg); Zusmmensetzen der Muster int x = In.redInt(); int sum = 0, n = 0; while (In.done()) { sum = sum + x; n++; x = In.redInt(); if (n!= 0) { flot vg = (flot)sum / n; Out.println("vg = " + vg); else Out.println("error"); Einlesen Summieren Prüfen Zählen Mittelwert Ausgbe 1 16 Weiteres Beispiel Schrittweise Eingbe von Ablufstrukturen Und-Verknüpfung von true- und flse-termen true true true true flse true Einlese-Muster Ausgbe-Muster Out.println(ok); true flse boolen b = In.redBoolen(); while (In.done()) { b = In.redBoolen(); Und-Muster boolen ok = true; while () { ok = ok && b; boolen b = In.redBoolen(); boolen ok = true; while (In.done()) { ok = ok && b; b = In.redBoolen(); Out.println(ok); Bei Schleifen while (In.done()) { while (In.done()) { x = In.redInt(); while (In.done()) { x = In.redInt(); Bei Abfrgen if (n!= 0) { else { if (n!= 0) { vg = (flot)sum / n; Out.println("vg = " + vg); else { if (n!= 0) { vg = (flot)sum / n; Out.println("vg = " + vg); else { Out.println("error"); 17 18

18 Die Typen flot und double Grundlgen der Progrmmierung Prof. H. Mössenböck. Gleitkommzhlen Vriblen flot x, y; double z; Konstnten // Bit groß // 6 Bit groß.1 // Typ double.1f // Typ flot.1e0 //.1 * E1 // 0.1 * E-1 // 1. * E // 100 Syntx der Gleitkommkonstnten FlotConstnt = [Digits] "." [Digits] [Exponent] [FlotSuffix]. Digits = Digit {Digit. Exponent = ("e" "E") ["+" "-"] Digits. FlotSuffix = "f" "F" "d" "D". Beispiel: Berechnung der hrmonischen Reihe sum = 1/1 + 1/ + 1/ + + 1/n clss HrmonicSequence { public sttic void min (String[] rg) { flot sum = 0; int n = In.redInt(); for (int i = n; i > 0; i--) sum += 1.0f / i Out.println("sum = " + sum); Ws würden sttt 1.0f / i folgende Ausdrücke liefern? Zuweisungen und Opertionen Zuweisungskomptibilität double flot long int short byte flot f; int i; f = i; // erlubt i = f; // verboten i = (int)f; // erlubt: schneidet Nchkommstellen b; flls zu groß: mxint, minint f = 1.0; // verboten, weil 1.0 vom Typ double ist Erlubte Opertionen Arithmetische Opertionen (+, -, *, /) Vergleiche (==,!=, <, <=, >, >=) Achtung: Gleitkommzhlen sollte mn nicht uf Gleichheit prüfen 1 / i 1.0 / i 0 (weil gnzzhlige Division) einen double-wert

19 Typen von Gleitkommusdrücken Der "kleinere" Operndentyp wird in den "größeren" konvertiert, zumindest ber in int. double flot long int short byte double d; flot f; int i; short s; d + i // double f + i // flot s + s // int Grundlgen der Progrmmierung Prof. H. Mössenböck 6. Methoden Ein- / Ausgbe von Gleitkommzhlen double d = In.redDouble(); flot f = In.redFlot(); Out.println("d = " + d + ", f = " + f); Prmeterlose Methoden Beispiel: Ausgbe einer Überschrift clss Smple { sttic void printheder() { // Methodenkopf Out.println("Artikelliste"); // Methodenrumpf Out.println(" "); public sttic void min (String[] rg) { printheder(); // Aufruf printheder(); Zweck von Methoden Wiederverwendung häufig benutzten Codes Definition benutzerspezifischer Opertionen Strukturierung des Progrmms Wie funktioniert ein Methodenufruf? sttic void P() { Q(); sttic void Q() { R(); Nmenskonventionen für Methoden Nmen sollten mit Verb und Kleinbuchstben beginnen Beispiele: printheder, findmximum, trverselist, sttic void R() {

20 Prmeter Werte, die vom Rufer n die Methode übergeben werden clss Smple { sttic void printmx (int x, int y) { if (x > y) Out.print(x); else Out.print(y); public sttic void min (String[] rg) { printmx(100, * i); formle Prmeter -im Methodenkopf (hier x, y) -sind Vriblen der Methode ktuelle Prmeter -n der Aufrufstelle (hier 100, *i) - können Ausdrücke sein Prmeterübergbe Aktuelle Prmeter werden den entsprechenen formlen Prmetern zugewiesen x = 100; y = * i; ktuelle Prmeter müssen mit formlen zuweisungskomptibel sein formle Prmeter enthlten Kopien der ktuellen Prmeter Funktionen Methoden, die einen Ergebniswert n den Rufer zurückliefern clss Smple { sttic int mx (int x, int y) { if (x > y) return x; else return y; public sttic void min (String[] rg) { int result = * mx(100, i + j) + 1; hben Funktionstyp(z.B. int) sttt void (= kein Typ) liefern Ergebnis mittels return- Anweisung n den Rufer zurück (x muss zuweisungskomptibel mit int sein) Werden wie Opernden in einem Ausdruck benutzt Funktionen Methoden mit Rückgbewert sttic int mx (int x, int y) { Prozeduren Methoden ohne Rückgbewert sttic void printmx (int x, int y) { Weiteres Beispiel Gnzzhliger Zweierlogrithmus clss Smple { sttic int log (int n) { // ssert: n > 0 int res = 0; while (n > 1) {n = n / ; res++; return res; public sttic void min (String[] rg) { int x = log(17); // x == Return in Prozeduren clss ReturnDemo { sttic void printlog (int n) { if (n <= 0) return; // kehrt zum Rufer zurück int res = 0; while (n > 1) {n = n / ; res++; Out.println(res); public sttic void min (String[] rg) { int x = In.redInt(); if (!In.done()) return; // beendet ds Progrmm printlog(x); 6 Funktionen Prozeduren müssen mit return beendet werden können mit return beendet werden 7

21 Lokle und sttische Vriblen Beispiel: Summe einer Zhlenfolge clss C { sttic int, b; sttic void P() { int x, y; Sttische Vriblen m Progrmmbeginn ngelegt m Progrmmende wieder freigegeben Sttische Vriblen uf Klssenebene mit sttic deklriert; uch in Methoden dieser Klsse sichtbr Lokle Vriblen in einer Methode deklriert (lokl zu dieser Methode; nur dort sichtbr) Reservieren und Freigeben von Speicherpltz Lokle Vriblen bei jedem Aufruf der Methode neu ngelegt m Ende der Methode wieder freigegeben flsch! clss Wrong { sttic void dd (int x) { int sum = 0; sum = sum + x; public sttic void min(string[] rg) { dd(1); dd(); dd(); Out.println("sum = " + sum); sum ist in min nicht sichtbr sum wird bei jedem Aufruf von dd neu ngelegt (lter Wert geht verloren) richtig! clss Correct { sttic int sum = 0; sttic void dd (int x) { sum = sum + x; public sttic void min(string[] rg) { dd(1); dd(); dd(); Out.println("sum = " + sum); 8 9 Sichtbrkeitsbereich von Nmen Progrmmstück, in dem uf diesen Nmen zugegriffen werden knn (uch Gültigkeitsbereich oder Scope des Nmens gennnt) clss Smple { sttic void P() { sttic int x; sttic int y; sttic void Q(int z) { int x; x y z x Regeln 1. Ein Nme drf in einem Block nicht mehrmls deklriert werden (uch nicht in geschchtelten Anweisungsblöcken).. Lokle Nmen verdecken Nmen, die uf Klssenebene deklriert sind.. Der Sichtbrkeitsbereich eines loklen Nmens beginnt bei seiner Deklrtion und geht bis zum Ende der Methode.. Auf Klssenebene deklrierte Nmen sind in llen Methoden der Klsse sichtbr. 10 Beispiel zu Sichtbrkeitsregeln x clss Smple { sttic void P() { Out.println(x); sttic int x = 0; // gibt 0 us public sttic void min(string[] rg) { x Out.println(x); // gibt 0 us int x = 1; // verdeckt sttisches x Out.println(x); // gibt 1 us P(); if (x > 0) { y int x; // Fehler: x ist in min bereits deklriert int y; y' else { int y; // ok, kein Konflikt mit y im then-zweig for (int i = 0; ) { for (int i = 1; ) { // ok, kein Konflikt mit i us letzter Schleife 11

22 Lebensduer von Vriblen clss LifenessDemo { sttic int g; sttic void A() { int ; sttic void B() { int b; A(); A(); public sttic void min(string[] rg) { int m; B(); Loklität Vriblen möglichst lokl deklrieren, nicht ls sttische Vriblen. Vorteile Übersichtlichkeit Deklrtion und Benutzung nhe beismmen Sicherheit Lokle Vriblen können nicht durch ndere Methoden zerstört werden Effizienz Zugriff uf lokle Vrible ist oft schneller ls uf sttische Vrible lokle Vriblen (Methodenkeller) m b m b m b m ' b m b m m sttische Vr. g g g g g g g g 1 1 Überlden von Methoden Methoden mit gleichem Nmen ber verschiedenen Prmeterlisten können in derselben Klsse deklriert werden sttic void write (int i) { sttic void write (flot f) { sttic void write (int i, int width) { Beim Aufruf wird diejenige Methode gewählt, die m besten zu den ktuellen Prmetern psst write(100); write (int i) write(.1f); write (flot f) write(100, ); write (int i, int width) short s = 17; write(s); write (int i); Beispiele Größter gemeinsmer Teiler nch Euklid sttic int ggt (int x, int y) { int rest = x % y; while (rest!= 0) { x = y; y = rest; rest = x % y; return y; Kürzen eines Bruchs sttic void reduce (int z, int n) { int x = ggt(z, n); Out.print(z/x); Out.print("/"); Out.print(n/x); 1 1

23 Beispiele Beispiele Prüfe, ob x eine Primzhl ist Berechne x n sttic boolen isprime (int x) { if (x ==1 x == ) return true; if (x % == 0) return flse; int i = ; while (i * i <= x) { if (x % i == 0) return flse; i = i + ; // i > x und x ist durch keine Zhl // zwischen 1 und i teilbr return true; for (int i = ; i * i <= x; i += ) if (x % i == 0) return flse; 16 sttic long power (int x, int n) { long res = 1; for (int i = 1; i <= n; i++) res = res * x; return res; Dsselbe effizienter sttic long power (int x, int n) { long res = 1; while (n > 0) { if (n % == 0) { x = x * x; n = n / ; // x n = (x*x) n else { res = res * x; n--; // x n+1 = x*x n return res; x n res Eindimensionle Arrys Arry = Tbelle gleichrtiger Elemente Grundlgen der Progrmmierung Prof. H. Mössenböck 7. Arrys Deklrtion [0] [1] [] [] int[] ; flot[] b; Erzeugung = new int[]; b = new flot[10]; Nme bezeichnet ds gesmte Arry Elemente werden über Indizes ngesprochen (z.b. []) Indizierung beginnt bei 0 Elemente sind "nmenlose" Vriblen deklriert ein Arry nmens (bzw. b) seine Elemente sind vom Typ int (bzw. flot) seine Länge ist noch unbeknnt legt ein neues int-arry mit Elementen n (us dem Hep-Speicher) weist seine Adresse zu [0] [1] [] [] [] Arry-Vriblen enthlten in Jv Zeiger uf Arrys! (Zeiger = Speicherdresse)

24 Arbeiten mit Arrys Arryzuweisung Zugriff uf Arryelemente [] = 0; [*i+1] = [i] * ; Arrylänge bfrgen int len =.length; Arryelemente werden wie Vriblen benutzt Index knn ein gnzzhliger Ausdruck sein Lufzeitfehler, flls Arry noch nicht erzeugt wurde Lufzeitfehler, flls Index < 0 oder Arrylänge length ist ein Stndrdopertor, der uf lle Arrys ngewendet werden knn. Liefert Anzhl der Elemente (hier ). int[], b; [0] = new int[]; 0 b = ; [0] = 17; b b b [0] [1] 0 [1] [] 0 [] b[0] b[1] b[] [0] [1] [] b[0] b[1] b[] Arryelemente werden in Jv stndrdmäßig mit 0 initilisiert b bekommt denselben Wert wie. Arryzuweisung ist in Jv Zeigerzuweisung! ändert in diesem Fll uch b[0] Beispiele for (int i = 0; i <.length; i++) [i] = In.redInt(); // Arry einlesen = new int[]; b zeigt jetzt uf neues Arry. int sum = 0; for (int i = 0; i <.length; i++) sum += [i]; // Elemente ufddieren b = null; b null: Spezilwert, der uf kein Objekt zeigt; knn jeder Arryvriblen zugewiesen werden Freigeben von Arryspeicher Grbge Collection (Automtische Speicherbereinigung) Objekte, uf die kein Zeiger mehr verweist, werden utomtisch eingesmmelt. Ihr Speicher steht für neue Objekte zur Verfügung sttic void P() { int[] = new int[]; int[] b = new int[]; int[] c = new int[]; b = ; c = null; b c b c b c b c kein Zeiger mehr uf dieses Objekt wird eingesmmelt kein Zeiger mehr uf dieses Objekt wird eingesmmelt Am Methodenende werden lokle Vriblen freigegeben Zeiger, b, c fllen weg Objekt wird eingesmmelt Initilisieren von Arrys primes int[] primes = {,,, 7, 11; 7 11 identisch zu int[] primes = new int[]; primes[0] = ; primes[1] = ; primes[] = ; primes[] = 7; primes[] = 11; Initilisierung knn uch bei der Erzeugung erfolgen int[] primes; primes = new int[] {,,, 7, 11; 6

25 Kopieren von Arrys int[] = {1,,,, ; int[] b; b 1 b = (int[]).clone(); 1 b 1 Typumwndlung nötig, d clone etws vom Typ Object[] liefert Kommndozeilenprmeter Progrmmufruf mit Prmetern jv Progrmmnme pr 1 pr pr n Prmeter werden ls String-Arry n min-methode übergeben clss Smple { public sttic void min (String[] rg) { for (int i = 0; i < rg.length; i++) Out.println(rg[i]); 7 Aufruf z.b. jv Smple Anton / 10 Ausgbe: Anton / 10 8 Beispiel: sequentielles Suchen Suchen eines Werts x in einem Arry flls gefunden flls nicht gefunden x pos = 17 pos = -1 Beispiel: binäres Suchen schneller ls sequentielles Suchen Arry muss llerdings sortiert sein z.b. Suche von sttic int serch (int[], int x) { int pos =.length - 1; while ( pos >= 0 && [pos]!= x ) pos--; // pos == -1 [pos] == x return pos; gewünschtes Ergebnis low m high Index des mittleren Element bestimmen ( m = (low + high) / ) 1 > [m] zwischen [m+1] und [high] weitersuchen Achtung: int[] wird nur ls Zeiger übergeben. Würde serch etws in ändern (z.b. [] = 0;), würde sich diese Änderung uch uf ds Arry im Rufer uswirken. 9 low m high 10

26 Binäres Suchen Primzhlenberechnung: Sieb des Erthostenes sttic int binryserch (int[], int x) { int low = 0; int high =.length - 1; while (low <= high) { int m = (low + high) / ; if ([m] == x) return m; else if (x > [m]) low = m + 1; else /* x < [m] */ high = m - 1; /* low > high*/ return -1; Suchrum wird in jedem Schritt hlbiert bei n Arryelementen sind höchstens log (n) Schritte nötig, um jedes Element zu finden 1. "Sieb" wird mit den ntürlichen Zhlen b gefüllt,,,, 6, 7, 8, 9, 10, 11, 1, 1, 1, 1, 16, 17, 18, 19, 0, 1,,,,, 6, 7,. Erste Zhl im Sieb ist Primzhl. Entferne sie und lle ihre Vielfchen,,,, 6, 7, 8, 9, 10, 11, 1, 1, 1, 1, 16, 17, 18, 19, 0, 1,,,,, 6, 7,,, 7, 9, 11, 1, 1, 17, 19, 1,,, 7,. Wiederhole Schritt,, 7, 9, 11, 1, 1, 17, 19, 1,,, 7,, 7, 11, 1, 17, 19,,, Wiederhole Schritt n seq.suchen bin.suchen, 7, 11, 1, 17, 19,,, , 11, 1, 17, 19,, Implementierung Sieb = boolen-arry, Zhl i im Sieb sieve[i] == true flse true true true true true true true flse Zhl i entfernen: sieve[i] = flse 0 1 flse flse flse true flse true 6 7 flse true true 8 9 flse sttic void printprimes (int mx) { boolen[] sieve = new boolen[mx + 1]; for (int i = ; i <= mx; i++) sieve[i] = true; for (int i = ; i <= mx; ) { Out.print(i + " "); // i is prime for (int j = i; j <= mx; j = j + i) sieve[j] = flse; while (i <= mx &&!sieve[i]) i++; true Beispiel: Montstge berechnen Bisher mit Switch-Anweisung gelöst switch (month) { cse 1: cse : cse : cse 7: cse 8: cse 10: cse 1: dys = 1; brek; cse : cse 6: cse 9: cse 11: dys = 0; brek; cse : dys = 8; Besser mit Tbelle int[] dys = {0, 1, 8, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1; int d = dys[month]; 1 1

27 Mehrdimensionle Arrys Mehrdimensionle Arrys Zweidimensionles Arry Mtrix Zeilen können unterschiedlich lng sein (ds ist ber selten sinnvoll) [0][0] [0][1] [0][] [1][0] [1][1] [1][] [][0] [][1] [][] [][0] [][1] [][] [0] [1] [] [0][0] [0][1] [0][] [1][0] [1][1] [][0] [][1] [][] [0][] int[][] = new int[][]; [0] = new int[]; [1] = new int[]; [] = new int[]; In Jv ls Arry von Arrys implementiert [0] [1] [0][0] [0][1] [0][] [1][0] [1][1] [1][] Deklrtion und Erzeugung int[][] ; = new int[][]; Initilisierung int[][] = {{1,,,{,, 6; [] [] [][0] [][1] [][] [][0] [][1] [][] Zugriff [i][j] = [i][j+1]; Beispiel: Mtrixmultipliktion i b c k i = j j Grundlgen der Progrmmierung Prof. H. Mössenböck c 0,0 = 0,0 *b 0,0 + 0,1 *b 1,0 + 0, *b,0 sttic flot[][] mtrixmult (flot[][], flot[][] b) { flot[][] c = new flot[.length][b[0].length]; for (int i = 0; i <.length; i++) for (int j = 0; j < b[0].length; j++) { flot sum = 0; for (int k = 0; k < b.length; k++) sum += [i][k] * b[k][j]; c[i][j] = sum; return c; 8. Zeichen 17

28 Dtentyp chr ASCII Zeichenvrible chr ch = 'x'; Zeichenkonstnte (unter einfchen Hochkomms) Zeichen brucht mn zur Verrbeitung von Texten. Zeichencodes ASCII (Americn Stndrd Code for Informtion Interchnge) 1 Zeichen = 1 Byte (18 bzw. 6 Zeichen drstellbr) z.b. in Pscl oder C verwendet Unicode ( 1 Zeichen = Bytes (66 Zeichen drstellbr) uch Umlute, griechische, rbische Zeichen etc. z.b. in Jv und C# verwendet ASCII ist Teilmenge von Unicode NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC DC DC NAK SYN ETB CAN EM SUB ESC FS GS RS US Wichtige Steuerzeichen BS HT ESC spce! " # $ % & ' ( ) * +, -. / : ; < = >? bckspce löscht Zeichen vor Cursor horizontl tb Tbultorsprung escpe A B C D E F G H I J K L M N O CR LF FF P Q R S T U V W X Y Z [ \ ] ^ _ crrige return line feed form feed b c d e f g h i j k l m n o p q r s t u v w x y z { ~ DEL Zeilenvorschub folgt uf CR Seitenvorschub Unicode F F 070-0FF 000-0FF 00-08F 090-0FF FF ASCII-Zeichen Umlute, Akzente, Sonderzeichen griechische Zeichen cyrillische Zeichen rmenische Zeichen hebräische Zeichen rbische Zeichen Detils siehe Unicode-Zeichenkonstnten Alle Zeichen können uch mit ihrem Unicode-Wert ngegeben werden: '\udddd' Beispiele: '\u001' '\u000d' '\u0009' '\u0c0' 'A' CR (crrige return) TAB Deutsche Umlute 00E 00F6 00FC ä ö ü 00C 00D6 00DC Ä Ö Ü 00DF ß Spezielle Zeichen '\n' LF (line feed, newline) '\r' CR (crrige return) '\t' TAB '\\' \ '\'' ' '\ddd' Zeichenwert ls Oktlzhl

29 Zeichen-Opertionen Beispiel: Textsuche Zuweisungen chr ch1, ch = ''; ch1 = ch; // ok, gleicher Typ int i = ch; // ok, chr knn int zugewiesen werden ch1 = (chr)i; // Zuweisung nch Typumwndlung möglich double flot long int short byte chr Vergleiche (==,!=, <, <=, >, >=) Zeichen sind nch Unicode-Wert geordnet; Buchstben und Ziffern liegen ufeinnderfolgend if ('' <= ch && ch <= 'z' 'A' <= ch && ch <= 'Z') Arithmetische Opertionen (+, -, *, /, %) 10 + (ch - 'A') // Ergebnistyp: int Zeichenrrys chr[] s = new chr[0]; chr[] t = {'', 'b', 'c'; // initilisiert lle Elemente mit '\u0000' 6 geg.: Text t, Muster pt ges.: erstes Vorkommen von pt in t t Einfuehrung in die Progrmmierung ung Ergebnis: pos 0: pt in t n Stelle pos pos < 0: pt kommt nicht in t vor ung sttic int serch (chr[] t, chr[] pt) { int lst = t.length - pt.length; for (int i = 0; i <= lst; i++) { if (t[i] == pt[0]) { int j = 1; while (j < pt.length && pt[j] == t[i+j]) j++; // j == pt.length pt[j]!= t[i+j] if (j == pt.length) return i; return -1; t pt ung pt i 0 1 j 7 Beispiel: Nchbuen von redint Stndrdfunktionen mit Zeichen sttic int redint() { int vl = 0; chr ch = In.red(); // liest ein einzelnes Zeichen while (In.done() && '0' <= ch && ch <= '9') { vl = 10 * vl + (ch - '0'); ch = In.red(); //! In.done() ch < '0' ch > '9' return vl; Schreibtischtest: Eingbe 1+ vl ch if (Chrcter.isLetter(ch)) if (Chrcter.isDigit(ch)) if (Chrcter.isLetterOrDigit(ch)) if (Chrcter.isLowerCse(ch)) if (Chrcter.isUpperCse(ch)) ch1 = Chrcter.toUpperCse(ch); ch1 = Chrcter.toLowerCse(ch); true, wenn ch ein Unicode-Buchstbe ist true, wenn ch eine Ziffer ist true, wenn ch ein Kleinbuchstbe ist true, wenn ch ein Großbuchstbe ist wndelt ch in einen Großbuchstben um wndelt ch in einen Kleinbuchstben um 0 '1' (9) '0' = 8 1 '' (0) 1 '' (1) 1 '+' () "Horner-Schem" 8 9

30 Dtentyp String Grundlgen der Progrmmierung Prof. H. Mössenböck 9. Strings String, b; = "Hello"; b = ; Bibliothekstyp für Zeichenketten ("Strings") Stringkonstnte (unter doppelten Hochkomms) b Hello Stringvriblen sind Zeiger uf Stringobjekte Stringzuweisung ist eine Zeigerzuweisung Stringobjekte sind nicht ls Arrys nsprechbr Stringobjekte sind nicht veränderbr b = + " World"; b Hello Hello World Verkettung mit "+" erzeugt neues Stringobjekt (reltiv teure Opertion) Stringvergleiche String s = In.redWord(); if (s == "Hello") if (s.equls("hello")) ber: String s = "Hello"; if (s == "Hello").. // liest ein Wort, z.b. Hello // liefert flse! (Zeigervergleich) s Hello Hello // liefert true! (Wertvergleich) weil zwei verschiedene Objekte, trotz gleichem Inhlt // liefert true, weil gleichlutende Stringkonstnten // nur einml ls Objekt bgespeichert werden. Stringopertionen String s = " long string"; int len = s.length(); chr ch = s.chrat(); int i = s.indexof("ng"); i = s.indexof("ng", ); i = s.indexof('n'); i = s.lstindexof("ng"); String x; x = s.substring(); x = s.substring(, 6); 0 1 l o n 6 g 7 S liefert Anzhl der Zeichen in s (im Gegenstz zu rr.length sind Klmmern nötig!) liefert ds Zeichen mit Index (hier 'o') liefert Index des 1. Vorkommens von "ng" in s (hier ) oder -1 liefert Index des 1. Vorkommens von "ng" b Index (hier 11) geht uch mit chr liefert Index des letzten Vorkommens von "ng" (Vrinten wie oben) liefert Teilstring b Index (hier "long string") liefert Teilstring s[..6[, d.h. s[..] (hier "long") 8 t 9 r 10 i 11 n 1 g trotzdem Wertvergleich immer mit equls durchführen if (s.strtswith("bc")) if (s.endswith("bc")) liefert true, flls s mit "bc" beginnt liefert true, flls s mit "bc" ended

31 Aufbuen von Strings Aufbuen von Strings us StringBuilder us Stringkonstnte String s = "very simple"; us chr-arry chr[] = {'', 'b', 'c', 'd', 'e'; String s1 = new String(); String s = new String(,, len); // s1 enthält Kopie der Zeichen in // s enthält Kopie von [..+len-1] us StringBuilder (Bibliothekstyp wie String, ber modifizierbr) StringBuilder b; b = new StringBuilder(); // erzeugt leeren StringBuilder der Länge 0 len = b.length(); b.ppend(x); b.insert(pos, x); b.delete(from, to); b.replce(from, to, "bc"); // hängt x n b n. x knn beliebigen Typ hben: // short, int, long, flot, double, chr, chr[], String, boolen // fügt x n der Stelle pos ein (Typ von x beliebig) // löscht [from..to[ us b // ersetzt b[from, to[ durch "bc" ch = b.chrat(i); s = b.substring(from, to); b.setchrat(pos, 'x'); s = b.tostring(); // wie bei String // setzt b[pos] uf 'x' // liefert Pufferinhlt ls String 6 Stringkonversionen int i = new Integer("1").intVlue(); flot f = new Flot(".1").flotVlue(); String s; s = String.vlueOf(1); s = String.vlueOf(.1); chr[] = s.tochrarry(); String s = new String(); // String int // String flot // int String // flot String // String chr[] // chr[] String Beispiel: Mnipultion von Dteipfden dir1\dir\nme.jv nme.clss -Verzeichnisse entfernen -".jv" uf ".clss" ändern (bzw. ".clss" nhängen) sttic String strip (String pth) { StringBuilder b = new StringBuilder(pth); // erzeugt StringBuilder mit pth ls Inhlt if (pth.endswith(".jv")) { int len = pth.length(); b.delete(len-, len); b.ppend(".clss"); int i = pth.lstindexof('\\'); if (i >= 0) b.delete(0, i+1); return b.tostring(); 7 8

32 Beispiel: Wörter us einem Text lösen Beispiel: Zhl in String konvertieren Eingbe: "Ein Text us Woertern " Ausgbe: Ein Text us Woertern sttic void printwords (String text) { int i = 0, lst = text.length() - 1; while (i <= lst) { //--- skip nonletters while (i <= lst &&!Chrcter.isLetter(text.chrAt(i))) i++; // end of text or text[i] is letter //--- red word int beg = i; while (i <= lst && Chrcter.isLetter(text.chrAt(i))) i++; // end of text or text[i] is not letter //--- print word if (i > beg) Out.println(text.substring(beg, i)); 0 i 1 b c d 6 e f lst 9 Idee: Ziffern mit n % 10 bsplten und in chr-arry smmeln sttic String vlueof (int n) { chr[] = new chr[0]; int i = 0; do { [i] = (chr) (n % 10 + '0'); n = n / 10; i++; while (n > 0); StringBuilder b = new StringBuilder(); do { i--; b.ppend([i]); while (i > 0); return b.tostring(); n 1 i 1 "" i 1 "" "" i 0 "" "" "1" "" "" "1" i "" "" i "" i i b "1" "1" "1" 10 Motivtion Wie würde mn ein Dtum speichern (z.b. 1. November 00)? Grundlgen der Progrmmierung Prof. H. Mössenböck 10. Klssen Vriblen int dy; String month; int yer; Unbequem, wenn mn mehrere Exemplre dvon brucht: int dy1; String month1; int yer1; int dy; String month; int yer; Idee: die Vriblen zu einem eigenen Dtentyp zusmmenfssen

33 Dtentyp Klsse Speicherung verschiedenrtiger Werte unter einem gemeinsmen Nmen Deklrtion clss Dte { int dy; String month; int yer; Verwendung ls Typ Dte x, y; Zugriff x.dy = 1; x.month = "November"; x.yer = 00; Felder der Klsse Dte x Dte-Objekt 1 "November" dy month 00 yer Dte-Vriblen sind Zeiger uf Objekte Objekte Objekte einer Klsse müssen vor ihrer ersten Benutzung erzeugt werden Dte x, y; Erzeugung x = new Dte(); Benutzung x.dy = 1; x.month = "November"; x.yer = 00; reserviert nur Speicher für die Zeigervriblen x y erzeugt ein Dte-Objekt und weist seine Adresse x zu x y 0 null 0 dy month yer neu erzeugte Objekte werden mit 0, null, flse, '\u0000' initilisiert Eine Klsse ist wie eine Schblone, von der beliebig viele Objekte erzeugt werden können. x y 1 "November" 00 dy month yer Zuweisungen y = x; y.dy = 0; x y x y 1 "November" 00 0 "November" 00 dy month yer dy month yer Zuweisungen sind erlubt, wenn die Typen gleich sind clss Dte { int dy; String month; int yer; d1 = d; 1 = ; d1 = ; clss Address { int number; String street; int zipcode; Zeigerzuweisung! ändert uch x.dy! Dte d1, d = new Dte(); Address 1, = new Address(); // ok, gleiche Typen // ok, gleiche Typen // verboten: verschiedene Typen trotz gleicher Struktur! Vergleiche Zeigervergleich x == y x!= y x < y x <= y x > y x >= y vergleicht nur Zeiger nicht erlubt Wertvergleich muss mittels Vergleichsmethode selbst implementiert werden sttic boolen equldte (Dte x, y) { return x.dy == y.dy && x.month.equls(y.month) && x.yer == y.yer; 6

34 Wo werden Klssen deklriert Beispiel: Polygone In einer einzigen Dtei (uf äußerster Ebene) clss C1 { clss C { clss MinProgrm { MinProgrm.jv public sttic void min (String[] rg) { Übersetzung jvc MinProgrm.jv In getrennten Dteien C1.jv clss C1 { C.jv clss C { MinProgrm.jv clss MinProgrm { public sttic void min (String[] rg) { jvc MinProgrm.jv C1.jv C.jv 7 clss Point { int x, y; clss Polygon { Point[] pt; (0,0) (60,0) int color; (10,0) (70,0) Polygon poly = new Polygon(); poly.pt = new Point[]; poly.color = RED; Point p = new Point(); p.x = 10; p.y = 0; poly.pt[0] = p; p = new Point(); p.x = 0; p.y = 0; poly.pt[1] = p; p = new Point(); p.x = 60; p.y = 0; poly.pt[] = p; p = new Point(); p.x = 70; p.y = 0; poly.pt[] = p; poly Polygon pt color Zugriff z.b. poly.pt[0].x = ; p Point 10 0 Point 0 0 Point 60 0 Point Methoden mit mehreren Rückgbewerten Jv-Funktionen hben nur 1 Rückgbewert Will mn mehrere Rückgbewerte, muss mn sie zu einer Klsse zusmmenfssen Beispiel: Umrechnung von Sekunden uf Std, Min, Sek clss Time { int h, m, s; clss Progrm { sttic Time convert (int sec) { Time t = new Time(); t.h = sec / 600; t.m = (sec % 600) / 60; t.s = sec % 60; return t; public sttic void min (String[] rg) { Time t = convert(10000); Out.println(t.h + ":" + t.m + ":" + t.s); sec convert 9 h m s Time Kombintion von Klssen mit Arrys Beispiel: Telefonbuch 0 99 nme phone Mier Myr Meier 66 Arry von Objekten clss Person { String nme; int phone; Person[] book = new Person[100]; book Mier Diese Lösung ist us logischer Sicht besser zweidimensionles Arry knn hier nicht verwendet werden Objekt bestehend us Arrys clss PhoneBook { String[] nme; int[] phone; PhoneBook book = new PhoneBook(); book.nme = new String[100]; book.phone = new int[100]; book nme phone Mier

35 Implementierung Implementierung (Fortsetzung) clss Person { String nme; int phone; clss PhoneBookSmple { sttic Person[] book; sttic int nentries = 0; // current number of entries in book sttic void enter (String nme, int phone) { if (nentries >= book.length) Out.println("--- phone book full"); else { book[nentries] = new Person(); book[nentries].nme = nme; book[nentries].phone = phone; nentries++; sttic int lookup (String nme) { int i = 0; while (i < nentries &&!nme.equls(book[i].nme)) i++; // i >= nentries nme.equls(book[i].nme) if (i < nentries) return book[i].phone; else return -1; book 0 1 nentries = Mier public sttic void min (String[] rg) { book = new Person[1000]; //----- red the phone book from file In.open("phonebook.txt"); String nme = In.redNme(); int phone; while (In.done()) { phone = In.redInt(); enter(nme, phone); nme = In.redNme(); In.close(); //----- serch in the phone book for (;;) { Out.print("Nme: "); nme = In.redNme(); if (!In.done()) brek; phone = lookup(nme); if (phone >= 0) Out.println("phone number = " + phone); else Out.println(nme + " unknown"); // end PhoneBookSmple 1 Klsse = Dten + Methoden Grundlgen der Progrmmierung Prof. H. Mössenböck 11. Objektorientierung Beispiel: Positionsklsse clss Position { privte int x; privte int y; void goleft() { x = x - 1; void goright() { x = x + 1; void goup() { y = y - 1; void godown() { y = y + 1; Methoden sind lokl zu Position ohne sttic deklriert (siehe später) Benutzung Position pos = new Position(); pos.goright(); // pos.x == 1, pos.y == 0 pos.godown(); // pos.x == 1, pos.y == 1 pos.godown(); // pos.x == 1, pos.y == ruft godown-methode von pos uf Jedes Objekt ht seinen eigenen Zustnd Position pos = new Position(); pos.goup(); // pos.x == 0, pos.y == -1 pos.goleft(); // pos.x == -1, pos.y == -1 Blck-Box goleft goright goup godown x y pos.goright(); Mn sgt: pos bekommt die Nchricht (messge) goright pos ist der Empfänger der Nchricht goright

36 Schlüsselwort this Beispiel: Bruchzhlenklsse Methoden können Prmeter hben clss Position { privte int x; privte int y; void goleft(int n) { x = x - n; Schlüsselwort this clss Position { privte int x; privte int y; void goleft(int x){ this.x = this.x - x; Position pos = new Position(); pos.goleft(); // pos.x == -, pos.y == 0 this bezeichnet ds Objekt, uf ds goleft ngewendet wird (nötig, um Feld x vom Prmeter x zu unterscheiden) clss Frction { int z; // Zähler int n; // Nenner void mult (Frction f) { z = z * f.z; n = n * f.n; void dd (Frction f) { z = z * f.n + f.z * n; n = n * f.n; Frction = new Frction();.z = 1;.n = ; Frction b = new Frction(); b.z = ; b.n = ; 1 z n.mult(b); b.mult(); b z n 10 1 z n z n b 10 Es wird immer der Zustnd des Empfängers verändert! b z n z n Grfische Nottion für Klssen UML-Nottion (Unified Modeling Lnguge) Frction int z int n void mult (Frction f) void dd (Frction f) Vereinfchte Form Frction z n mult(f) dd(f) Klssennme Felder Methoden flls weniger Detils gewünscht oder nötig Konstruktoren Spezielle Methoden, die beim Erzeugen eines Objekts utomtisch ufgerufen werden clss Frction { int z, n; Frction (int z, int n) { this.z = z; this.n = n; Frction () { z = 0; n = 1; void mult (Frction f) { void dd (Frction f) { Aufruf Frction f = new Frction(); Frction g = new Frction(, ); dienen zur Initilisierung eines Objekts heißen wie die Klsse ohne Funktionstyp und ohne void können Prmeter hben können überlden werden 1. legt neues Frction-Objekt n. ruft für dieses Objekt den Konstruktor uf 6

37 Bsp: Polygon-Aufbu mit Konstruktoren clss Point { int x, y; Point (int x, int y) { this.x = x; this.y = y; clss Polygon { Point[] pt; int color; Polygon (Point[] pt, int color) { this.pt = pt; this.color = color; clss Progrm { Polygon poly = new Polygon( new Point[] { new Point(10, 0), new Point(0, 0), new Point(60, 0), new Point(70, 0), RED ); (0,0) (60,0) (10,0) (70,0) poly Polygon pt color Point sttic clss Window { int x, y, w, h; sttic int border; // Objektfelder (in jedem Window-Objekt vorhnden) // Klssenfeld (nur einml pro Klsse vorhnden) void redrw () { // Objektmethode (uf Objekte nwendbr) sttic void setborder (int n) {border = n; // Klssenmethode (uf Klsse Window nwendbr) Window(int w, int h) { sttic { Klsse Window border setborder() Klssenkonstruktor Window-Objekt x y w h redrw() Window() // Objektkonstruktor (zur Initilisierung von Objekten) // Klssenkonstruktor (zur Initilisierung der Klsse) Window-Objekt x y w h redrw() Window() Window-Objekt x y w h redrw() Window() Objektmethoden hben Zugriff uf Klssenfelder (redrw knn uf border zugreifen) Klssenmethoden hben keinen direkten Zugriff uf Objektfelder (setborder knn nicht uf x zugreifen) 8 sttic (Forts.) sttic (Forts.) Ws geschieht wnn? Beim Lden der Klsse Window - Klssenfelder werden ngelegt (border) - Klssenkonstruktor wird ufgerufen Beim Erzeugen eines Window-Objekts (new Window()) - Objektfelder werden ngelegt (x, y, w, h) - Objektkonstruktor wird ufgerufen Zugriffe Zugriff uf sttic-elemente über den Klssennmen - Window.border = ; Window.setBorder(); - Methoden der Klsse Window können Klssennmen weglssen (border = ; setborder();) Zugriff uf nonsttic-elemente über einen Objektnmen - Window win = new Window(100, 0); win.x = ; win.redrw(); - Methoden der Klsse Window können uf eigene Elemente direkt zugreifen (x = ; redrw();) clss Window { sttische Progrmmelemente sttic int border; ngelegt m Progrmmnfng (wenn die Klsse gelden wird) sttic { ufgerufen m Progrmmnfng (wenn die Klsse gelden wird) sttic void setborder(int n) { nichtsttische Progrmmelemente int x, y, w, h; ngelegt, wenn ds Window-Objekt erzeugt wird Window() { ufgerufen, wenn ds Window-Objekt erzeugt wird void redrw() { void foo() { x = 0; redrw(); border = 1; setborder(1); Zugriff uf eigene Elemente ohne Qulifiktion Window w = new Window(); w.x = 0; w.redrw(); Zugriff uf fremde Elemente mit Qulifiktion Window.border = 1; Window.setBorder(1); 9 Sttische Felder leben während der gesmten Progrmmusführung! 10

38 Beispiel: Stck und Queue Klsse Stck Stck (Stpel, Kellerspeicher) push(x); x = pop(); push(); push(); fügt x hinten n den Stck n entfernt und liefert hinterstes Stckelement x = pop(); // x == y = pop(); // y == Queue (Puffer, Schlnge) put(x); x = get(); put(); put(); x = get(); // x == y = get(); // y == LIFO-Dtenstruktur (lst in first out) fügt x hinten n die Queue n entfernt und liefert vorderstes Queueelement FIFO-Dtenstruktur (first in first out) clss Stck { int[] dt; int top; Stck (int size) { dt = new int[size]; top = -1; void push (int x) { if (top == dt.length - 1) Out.println("-- overflow"); else dt[++top] = x; int pop () { if (top < 0) { Out.println("-- underflow"); return 0; else return dt[top--]; 0 Benutzung top dt Stck s = new Stck(10); s.push(); s.push(6); int x = s.pop() + s.pop(); // x == Klsse Queue Klssifiktion clss Queue { int[] dt; int hed, til, n; Queue (int size) { dt = new int[size]; hed = 0; til = 0; n = 0; void put (int x) { if (n == dt.length) Out.println("-- overflow"); else { dt[til] = x; n++; til = (til+1) % dt.length; int get () { if (n == 0) { Out.println("-- underflow"); return 0; else int x = dt[hed]; n--; hed = (hed+1) % dt.length; return x; til hed Benutzung til hed dt dt Queue q = new Queue(10); q.put(); q.put(6); int x = q.get(); // x == int y = q.get(); // y == 6 n == n == 1 Dinge der relen Welt lssen sich oft klssifizieren z.b. Artikel eines Web-Shops HrdCover Mn bechte Artikel Buch Audio Kmer SoftCover ebook CD Cssette Digitl Ein ebook ht lle Eigenschften eines Buchs; zusätzlich ht es Ein Buch ht lle Eigenschften eines Artikels; zusätzlich ht es Anlog CD und Cssette lssen sich gleichermßen ls Audio behndeln Buch, Audio und Kmer lssen sich gleichermßen ls Artikel behndeln Vererbung 1

39 Vererbung Überschreiben von Methoden clss Article { int code; int price; boolen vilble() { void print() { Article(int c, int p) { clss Book extends Article { String uthor; String title; void print() { Book(int c, int p, String, String t) { Oberklsse Bsisklsse Unterklsse erbt: code, price, vilble, print ergänzt: uthor, title, Konstruktor überschreibt: print Article code price vilble() print() Article(c, p) Book uthor title print() Book(c, p,, t) Wenn keine Oberklsse ngegeben wird, ist sie Object 1 clss Article { void print() { Out.print(code + " " + price); Article(int c, int p) { code = c; price = p; clss Book extends Article { void print() { super.print(); Out.print(" " + uthor + ": " + title); Book(int c, int p, String, String t) { super(c, p); uthor = ; title = t; Benutzung Book book = new Book(code, price, uthor, title); erzeugt Book-Objekt Book-Konstruktor Article-Konstruktor (code = c; price = p;) uthor = ; title = t; book code price uthor title book.print(); print us Book print us Article Out.print(); Ausgbe: code price uthor: title code price uthor: title 16 Klssenhierrchien Komptibilität zwischen Klssen Book uthor title print() CD trcks print() Jedes Buch ist ein Artikel Aber: nicht jeder Artikel ist ein Buch Article code price vilble() print() Audio songs print() Cssette lengh print() Cmer supplier print() 17 Unterklssen sind Spezilisierungen ihrer Oberklssen Book-Objekte können Article-Vriblen zugewiesen werden Article = new Book(code, price, uthor, title); code price uthor title if ( instnceof Book) Book b = (Book) ; b code price uthor title nur Article-Felder sind über zugreifbr.code.price // Lufzeittyptest // Typumwndlung mit Lufzeittypprüfung lle Book-Felder sind über b zugreifbr b.code b.price b.uthor b.title 18

40 Dynmische Bindung Heterogene Dtenstruktur Article[] ; Article vilble() print() Grundlgen der Progrmmierung Prof. H. Mössenböck Book CD Book CD Cmer Alle Vrinten können ls Artikel behndelt werden Book print() Audio print() Cmer print() 1. Dynmische Dtenstrukturen void printarticles() { for (int i = 0; i <.length; i++) { if ([i].vilble()) { [i].print(); ruft vilble() us Article uf ruft je nch Artikelrt ds print() us Book, CD oder Cmer uf Dynmische Bindung obj.print() ruft die print-methode des Objekts uf, uf ds obj gerde zeigt 19 Wrum "dynmisch" Elemente werden zur Lufzeit (dynmisch) mit new ngelegt Dtenstruktur knn dynmisch wchsen und schrumpfen Wichtigste dynmische Dtenstrukturen Verknüpfen von Knoten clss Node { int vl; Node next; Node(int v) {vl = v; Erzeugen Node = new Node(); Node b = new Node(); b Liste Bum Grph Verknüpfen.next = b; b Bestehen us "Knoten", die über "Knten" miteinnder verbunden sind. Knoten Objekte Knten Zeiger

41 Unsortierte Liste Unsortierte Liste (Forts.) Einfügen m Listenende clss List { Node hed = null, til = null; void ppend (int vl) { // Einfügen m Listenende Node p = new Node(vl); if (hed == null) hed = p; else til.next = p; til = p; Einfcher ist es, m Listennfng einzufügen clss List { Node hed = null; void prepend (int vl) { // Einfügen m Listennfng Node p = new Node(vl); p.next = hed; hed = p; hed 8 7 til vl til p hed p vl hed 8 7 hed vl p til hed vl p Unsortierte Liste (Forts.) hed clss List { Node hed = null; 8 7 Node serch (int vl) { // Suchen eines Werts Node p = hed; while (p!= null && p.vl!= vl) p = p.next; // p == null p.vl == vl return p; p p p void delete (int vl) { // Löschen eines Werts Node p = hed, prev = null; while (p!= null && p.vl!= vl) { prev = p; p = p.next; // p == null p.vl == vl if (p!= null) // p.vl == vl hed if (p == hed) hed = p.next else prev.next = p.next; 8 7 prev prev p p Suchen von 7 Löschen von 6 Grundlgen der Progrmmierung Prof. H. Mössenböck 1. Rekursion

42 Ws heißt "rekursiv" Eine Methode m() heißt rekursiv, wenn sie sich selbst ufruft m() m() m() n() m() direkt rekursiv indirekt rekursiv Beispiel: Berechnung der Fkultät (n!) n! = 1 * * * * (n-1) * n (n-1)! rekursive Definition n! = (n-1)! * n 1! = 1 Rekursive Methode zur Berechnung der Fkultät long fct (long n) { if (n == 1) return 1; else return fct(n-1) * n; Allgemeines Muster! =! *! =! *! = 1! * 1! = 1 if (Problem klein genug) nichtrekursiver Zweig; else rekursiver Zweig mit kleinerem Problem Abluf einer rekursiven Methode n = long fct (long n) { if (n == 1) return 1; else return fct(n-1) * n; n = 6 long fct (long n) { if (n == 1) return 1; else return fct(n-1) * n; Jede Aktivierung von fct ht ihr eigenes n und rettet es über den rekursiven Aufruf hinweg n = long fct (long n) { if (n == 1) return 1; else return fct(n-1) * n; n = 1 1 long fct (long n) { if (n == 1) return 1; else return fct(n-1) * n; Beispiel: binäres Suchen rekursiv z.b. Suche von 17 (Arry muss sortiert sein) low m high low m high sttic int serch (int elem, int[], int low, int high) { if (low > high) return -1; // empty int m = (low + high) / ; if (elem == [m]) return m; if (elem < [m]) return serch(elem,, low, m-1); return serch(elem,, m+1, high); Index m des mittleren Element bestimmen 17 > [m] in rechter Hälfte weitersuchen nichtrekursiver Zweig rekursiver Zweig Abluf des rekursiven binären Suchens elem = 17, low = 0, high = 7 6 sttic int serch (int elem, int[], int low, int high) { if (low > high) return -1; int m = (low + high) / ; if (elem == [m]) return m; if (elem < [m]) return serch(elem,, low, m-1); return serch(elem,, m+1, high); low =, high = 7 6 m = sttic int serch (int elem, int[], int low, int high) { if (low > high) return -1; int m = (low + high) / ; if (elem == [m]) return m; if (elem < [m]) return serch(elem,, low, m-1); return serch(elem,, m+1, high); low = 6, high = 7 6 m = sttic int serch (int elem, int[], int low, int high) { if (low > high) return -1; int m = (low + high) / ; if (elem == [m]) return m; if (elem < [m]) return serch(elem,, low, m-1); return serch(elem,, m+1, high); m = 6 low m high low m high low high m

43 Beispiel: größter gemeinsmer Teiler rekursiv sttic int ggt (int x, int y) { int rest = x % y; if (rest == 0) return y; else return ggt(y, rest); itertiv sttic int ggt (int x, int y) { int rest = x % y; while (rest!= 0){ x = y; y = rest; rest = x % y; return y; Grundlgen der Progrmmierung Prof. H. Mössenböck 1. Schrittweise Verfeinerung Jeder rekursive Algorithmus knn uch itertiv progrmmiert werden rekursiv: meist kürzerer Quellcode itertiv: meist kürzere Lufzeit Rekursion v.. bei rekursiven Dtenstrukturen nützlich (Bäume, Grphen, ) 6 Entwurfsmethode für Algorithmen Wie kommt mn von der Aufgbenstellung zum Progrmm? Beispiel geg.: Text us Wörtern ges.: Wie oft kommt jedes Wort im Text vor? Welche Befehle würde mn sich wünschen, um diese Aufgbe zu lösen? lies Wort speichere und suche Wort in einer Tbelle erhöhe Wortzähler für gespeichertes Wort drucke Zähler für lle gespeicherten Worte Leider gibt es keine Sprche mit diesen Befehlen Befehle ls Methoden implementieren (d.h. gewünschte "Sprche" selbst buen) Vorgehensweise Schrittweise Verfeinerung 1. Zerlege Aufgbe in Teilufgben und spezifiziere deren Schnittstelle. Nimm n, dss die Teilufgben schon gelöst sind. Implementiere Gesmtufgbe mit Hilfe der Teillösungen. Sind die Teilufgben einfch genug? j => implementiere sie direkt in einer Progrmmiersprche nein => Zerlege sie weiter (Schritt 1) Ws bringt ds? c < c/ Komplexität n/ n ttsächlich zu erwrten Progrmmgröße Komplexität steigt überproportionl mit der Progrmmgröße Hlbierung der Progrmmgröße reduziert die Komplexität um mehr ls die Hälfte!

44 Beispiel Aufgbe: "Zähle die Häufigkeit von Wörtern in einem Text" Beispiel (Forts.). Implementiere Gesmtufgbe mit Hilfe der Teillösungen 1. Zerlege Aufgbe in Teilufgben und spezifiziere deren Schnittstelle word = redword(); Klsse WordTble mit folgenden Methoden: tb.count(word); tb.print(); liefert nächstes Wort oder null, wenn kein Wort mehr von der ktuellen Eingbedtei gelesen werden knn. trägt word in tb ein (flls noch nicht vorhnden) und erhöht Worthäufigkeit um 1 gibt Wörter und ihre Häufigkeiten us. Nimm n, dss die Teilufgben schon gelöst sind clss WordCount { public sttic void min (String[] rg) { WordTble tb = new WordTble(); In.open("input.txt"); String word = redword(); while (word!= null) { tb.count(word); word = redword(); In.close(); tb.print(); Ws hben wir bisher geleistet? Sehr viel! Wir hben die komplexe Aufgbe WordCount uf reltiv einfche Teilufgben wie redword() oder tb.count(word) reduziert. Beispiel (Forts.) Beispiel (Forts.). Zerlege Teilufgben weiter (redword) Grobstruktur der Worttbelle ch = In.red(); Chrcter.isLetter(ch) word.ppend(ch) lies ein Zeichen; In.done == flse, wenn Dteiende prüfe, ob ch ein Buchstbe ist füge ch n ds Wort word n Alle Teilufgben sind bereits in der Jv-Bibliothek implementiert. Implementiere redword() mit ihnen sttic String redword () { StringBuilder word = new StringBuilder(); chr ch; //----- skip nonletters do ch = In.red(); while (In.done() &&! Chrcter.isLetter(ch)); //!In.done() ch is letter //----- build the word while (In.done() && Chrcter.isLetter(ch)) { word.ppend(ch); ch = In.red(); //! In.done() ch is not letter if (word.length > 0) return word.tostring(); else return null; 6 Dtenstruktur: verkettete Liste von Wörtern und Häufigkeiten clss Element { String word; int freq; Element next; Element (String w) { word = w; freq = 1; first word freq next clss WordTble { Element first = null; void count (String word) { void print () { 7

45 Beispiel (Forts.). Zerlege Teilufgben weiter (tb.count(word)) elem = tb.find(word); tb.enter(word); freq++; void count (String word) { Element e = tb.find(word); if (e == null) tb.enter(word); else e.freq++; suche word in tb und liefere entspr. Element oder null trge word in tb ein (es kommt noch nicht vor) erhöhe Worthäufigkeit Beispiel (Forts.). Zerlege Teilufgben weiter (tb.print()) Ist so einfch, dss mn es sofort implementieren knn void print () { for (Element e = first; e!= null; e = e.next) Out.println(e.word + ": " + e.freq); find und enter sind so einfch, dss mn sie sofort implementieren knn Element find (String word) { Element e = first; while (e!= null &&!word.equls(e.word)) { e = e.next; // e == null word.equls(e.word) return e; void enter (String word) { Element e = new Element(word); e.next = first; first = e; 8 9 Zusmmensetzen der einzelnen Teile Zusmmensetzen der einzelnen Teile clss Element { String word; int freq; Element next; Element (String w) { word = w; freq = 1; clss WordTble { privte Element first = null; privte Element find (String word) { Element e = first; while (e!= null &&!word.equls(e.word)) e = e.next; return e; privte void enter (String word) { Element e = new Element(word); e.next = first; first = e; void count (String word) { Element e = tb.find(word); if (e == null) tb.enter(word); else e.freq++; void print () { for (Element e = first; e!= null; e = e.next) Out.println(e.word + ": " + e.freq); 10 clss WordCount { public sttic void min (String[] rg) { WordTble tb = new WordTble(); In.open("input.txt"); String w = redword(); while (w!= null) {tb.count(w); w = redword(); In.close(); tb.print(); sttic String redword () { StringBuilder word = new StringBuilder(); chr ch; do ch = In.red(); while (In.done() &&! Chrcter.isLetter(ch)); while (In.done() && Chrcter.isLetter(ch)) { word.ppend(ch); ch = In.red(); if (word.length > 0) return word.tostring(); else return null; 11

46 Aufrufhierrchie min WordCount WordTble Weiteres Beispiel: Index erzeugen Eingbe Seitennummer Stichwort 1 = if-anweisung; Verzweigung; Abfrge; # = while-anweisung; Schleife; Abfrge; # = Ende einer Seitenngbe redword count print Zwischendtei red isletter find enter if-anweisung 1 Verzweigung 1 Abfrge 1 while-anweisung Schleife Abfrge Sortierung Abfrge 1 Abfrge if-anweisung 1 Schleife Verzweigung 1 while-anweisung 1 Ausgbe Abfrge 1, if-anweisung 1 Schleife 1 Idee Pket = Smmlung zusmmengehöriger Klssen (Bibliothek) Grundlgen der Progrmmierung Prof. H. Mössenböck 1. Pkete Zweck mehr Ordnung in Progrmme bringen bessere Kontrolle der Zugriffsrechte (wer drf uf ws zugreifen) Vermeidung von Nmenskonflikten Beispiele für Pkete in der Jv-Klssenbibliothek Pket enthltene Klssen jv.lng System, String, Integer, Chrcter, Object, Mth, jv.io File, InputStrem, OutputStrem, Reder, Writer, jv.wt Button, CheckBox, Frme, Color, Cursor, Event, jv.util ArryList, Hshtble, BitSet, Stck, Vector, Rndom, siehe:

47 Anlegen von Pketen Pkete ls Sichtbrkeitsgrenzen Dtei Circle.jv pckge grphics; clss Circle { Dtei Rectngle.jv pckge grphics; clss Rectngle { 1. Zeile der Dtei Ws in einem Pket deklriert ist, ist in nderen Pketen unsichtbr pckge one; clss C { clss D { pckge two; clss D { C obj; Compiler meldet einen Fehler! C ist hier unsichtbr Pket grphics enthält die Klssen Circle und Rectngle gleicher Nme stört nicht Circle Felder Methoden Rectngle Felder Methoden Pket grphics Wenn pckge-zeile fehlt, gehören die Klssen zu einem nmenlosem Stndrdpket Zweck In verschiedenen Pketen können gleiche Nmen verwendet werden Progrmmierer müssen nicht Rücksicht nehmen, welche Nmen schon wonders verwendet wurden Export von Nmen Nmen können mit dem Zustz public exportiert werden (sie sind dnn in nderen Pketen sichtbr) uch in nderen Pketen sichtbr pckge one; public clss C { int x; public int y; void p() { public void q() { C () { public C (int x, int y) { clss D { public-felder und -Methoden werden nur dnn exportiert, wenn die Klsse selbst public ist. Lokle Vriblen und Prmeter können nicht exportiert werden. nur in diesem Pket sichtbr Import von Klssennmen Exportierte Klssennmen können in nderen Pketen importiert werden Durch gezielten Import der Klsse pckge mypck; import grphics.circle; import one.c; clss MyClss { Circle c; Durch Import ller public-klssen eines Pkets pckge mypck; import grphics.*; clss MyClss { Circle c; Rectngle r; Durch Qulifiktion mit dem Pketnmen pckge mypck; clss MyClss { grphics.circle c1; jv.wt.circle c; 6

48 Pkete und Verzeichnisse Pkete werden uf Verzeichnisse bgebildet, Klssen uf Dteien Geschchtelte Pkete Pkete können zu größeren Pketen zusmmengefsst werden Klsse C Dtei C.jv Pket P Verzeichnis P pckge P; clss A { Pket P pckge P; clss B { pckge P; clss C { Smples P A.jv B.jv C.jv pckge smples.grphics; public clss Circle pckge smples.grphics; public clss Rectngle grphics smples io pckge smples.io; public clss Input pckge smples.io; public clss Output smples grphics Circle.jv Rectngle.jv io Input.jv Output.jv Übersetzung und Ausführung mit dem JDK Benutzung cd C:\Smples jvc P/A.jv jv P/A jv P.A beides möglich 7 import smples.grphics.circle; import smples.grphics.* import smples.*; smples.io.output out; importiert die Klsse Circle importiert lle public-klssen us smples.grphics importiert lle public-klssen us smples (nicht us smples.grphics) Qulifiktion einer Klsse us einem geschchtelten Pket 8 Informtion Hiding (Geheimnisprinzip) Prinzip Verstecke die Implementierung komplexer Dtenstrukturen vor Benutzern Erlube den Zugriff uf die Dten nur über Methoden Wrum? push pop Zugriffsmethoden (Klssenschnittstelle) Dten "Blck Box" Verringert die Komplexität (Arbeiten mit den Dten wird einfcher) Implementierung der Dten knn geändert werden, ohne dss Benutzer etws merken Schutz vor mutwilliger oder unbsichtlicher Zerstörung push Klsse Stck pop 9 Sichtbrkeitsttribute für Felder und Methoden privte int ; nur in der Klsse sichtbr, in der ds Element deklriert wurde int b; nur im Pket sichtbr, in dem ds Element deklriert wurde protected int c; sichtbr: -in der deklrierenden Klsse - in deren Unterklssen (selbst wenn sie in nderen Pketen liegen) - im deklrierenden Pket public int d; uch in nderen Pketen sichtbr, wenn importiert pckge one; public clss C { privte int ; int b; protected int c; public int d; public clss D { b c d pckge two; import one.c; public clss E extends C { public clss F { c d 10

49 Beispiel: Stck mit Informtion Hiding Dokumenttionskommentre public clss Stck { privte int[] dt; privte int top; public Stck (int size) { dt = new int[size]; top = -1; public void push (int x) { if (top >= dt.length) error("stck overflow"); else dt[++top] = x; public int pop () { if (top < 0) error("stck underflow"); else return dt[top--]; privte void error (String msg) { Out.println(msg); System.exit(0); Klssenschnittstelle Stck Stck() push(int x) pop(): int 11 Dokumenttionskommentre /** */ können vor die Deklrtionen von Klssen, Methoden, Feldern gesetzt werden. Werkzeug jvdoc erzeugt drus Dokumenttion in HTML /** A stck of integers. This is FIFO dt structure storing integers in stck-like wy. */ public clss Stck { /** The elements in the stck. */ privte int[] dt; /** Push n integer on the stck. If the stck is full n error is reported nd the progrm stops. */ public void push (int x) { 1. Stz bis Punkt wird in Kurzdoku übernommen Rest wird in Lngdoku übernommen 1 Erzeugte HTML-Dtei (Stck.html) jvdoc Aufrufsyntx Optionen jvdoc [options] {filenme pckgenme -public -privte -d pth zeigt nur public-deklrtionen zeigt public- und privte-deklrtionen gibt Zugriffspfd für mehrere Klssen und Pkete n 1 Beispiel jvdoc -public mydirectory/stck.jv erzeugt: mydirectory/stck.html diverse ndere Übersichtsdteien Vollständige Dokumenttion von jvdoc 1

Grundlagen der Programmierung Prof. H. Mössenböck. 7. Arrays

Grundlagen der Programmierung Prof. H. Mössenböck. 7. Arrays Grundlgen der Progrmmierung Prof. H. Mössenböck 7. Arrys Eindimensionle Arrys Arry = Tbelle gleichrtiger Elemente [0] [1] [2] [3] Nme bezeichnet ds gesmte Arry Elemente werden über Indizes ngesprochen

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden Grundlagen der Programmierung Prof. H. Mössenböck 6. Methoden Parameterlose Methoden Beispiel: Ausgabe einer Überschrift class Sample { static void printheader() { // Methodenkopf Out.println("Artikelliste");

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 2. Einfache Programme

Grundlagen der Programmierung Prof. H. Mössenböck. 2. Einfache Programme Grundlagen der Programmierung Prof. H. Mössenböck 2. Einfache Programme Grundsymbole Namen bezeichnen Variablen, Typen,... in einem Programm - bestehen aus Buchstaben, Ziffern und "_" - beginnen mit Buchstaben

Mehr

Ausdrücke haben einen Wert sin(math.pi) wird zu 1 sin(kreisradius) wird zur Laufzeit ausgewertet. Informatik I Kapitel 6

Ausdrücke haben einen Wert sin(math.pi) wird zu 1 sin(kreisradius) wird zur Laufzeit ausgewertet. Informatik I Kapitel 6 Informtik I Kpitel 6 Ausdrücke hben einen Wert sin(mth.pi) wird zu 1 sin(kreisrdius) wird zur Lufzeit usgewertet Elementre Konzepte von Progrmmiersprchen Zusmmenfssung des Kpitel 6 Küchlin, Weber, Einführung

Mehr

Zeichen. Datentyp char. char ch = 'x'; Page 1. Zeichen braucht man zur Verarbeitung von Texten, Namen, Bezeichnungen. Zeichencodes

Zeichen. Datentyp char. char ch = 'x'; Page 1. Zeichen braucht man zur Verarbeitung von Texten, Namen, Bezeichnungen. Zeichencodes Zeichen Datentyp char char ch = 'x'; Zeichenvariable Zeichenkonstante (unter einfachen Hochkommas) Zeichen braucht man zur Verarbeitung von Texten, Namen, Bezeichnungen. Zeichencodes ASCII (American Standard

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 4. Schleifen

Grundlagen der Programmierung Prof. H. Mössenböck. 4. Schleifen Grundlagen der Programmierung Prof. H. Mössenböck 4. Schleifen While-Schleife Führt eine Anweisungsfolge aus, solange eine bestimmte Bedingung gilt i 1 sum 0 i n sum sum + i i i + 1 i = 1; sum = 0; while

Mehr

3. Kontrollstrukturen Grundlagen der Programmierung 1 (Java)

3. Kontrollstrukturen Grundlagen der Programmierung 1 (Java) 3. Kontrollstrukturen Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 11. Oktober 2005 Agenda Agenda Verzweigungen

Mehr

3. Gültigkeit von Definitionen

3. Gültigkeit von Definitionen 3. Gültigkeit von Definitionen GPS-3-1 Themen dieses Kpitels: Definition und Bindung von Bezeichnern Verdeckungsregeln für die Gültigkeit von Definitionen Gültigkeitsregeln in Progrmmiersprchen 2005 bei

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen Grundlagen der Programmierung Prof. H. Mössenböck 10. Klassen Motivation Wie würde man ein Datum speichern (z.b. 13. November 2004)? 3 Variablen int da; String month; int ear; Unbequem, wenn man mehrere

Mehr

Schleifen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 45

Schleifen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 45 Schleifen Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 45 While-Schleife Führt eine Anweisungsfolge aus, solange eine bestimmte Bedingung gilt i 1 sum

Mehr

Ungleichungen. Jan Pöschko. 28. Mai Einführung

Ungleichungen. Jan Pöschko. 28. Mai Einführung Ungleichungen Jn Pöschko 8. Mi 009 Inhltsverzeichnis Einführung. Ws sind Ungleichungen?................................. Äquivlenzumformungen..................................3 Rechnen mit Ungleichungen...............................

Mehr

Bisher haben wir keine Annahmen bzgl. der Sortierung der gegebenen Werte gemacht, d.h. sie durften in beliebiger Reihenfolge im Array a stehen

Bisher haben wir keine Annahmen bzgl. der Sortierung der gegebenen Werte gemacht, d.h. sie durften in beliebiger Reihenfolge im Array a stehen 4.2.2 Binäre Suche Bisher hben wir keine Annhmen bzgl. der Sortierung der gegebenen Werte gemcht, d.h. sie durften in beliebiger Reihenfolge im Arry stehen Nehmen wir n, dss die Werte im Arry gemäß der

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 20 Einstieg in die Informatik mit Java Literalkonstanten Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Ganzzahlige Konstanten 2 Gleitkommakonstanten 3 Zeichenkonstanten

Mehr

Der Datentyp String. Stringvariable und -vergleiche

Der Datentyp String. Stringvariable und -vergleiche Informatik 12 mit Java: Gierhardt Zeichenketten bzw. Strings Der Datentyp String Zeichenketten bzw. Strings sind eine häufig benutzte Datenstruktur. Man könnte auch mit Arrays aus Zeichen arbeiten. Da

Mehr

Gleitkommazahlen. Die Typen float und double. Page 1. Variablen. Konstanten. Syntax der Gleitkommakonstanten

Gleitkommazahlen. Die Typen float und double. Page 1. Variablen. Konstanten. Syntax der Gleitkommakonstanten Gleitkommazahlen Die Typen float und double Variablen float x, y; double z; // 32 Bit groß // 64 Bit groß Konstanten FloatConstant Digits Exponent FloatSuffix 3.14 // Typ double 3.14f // Typ float 3.14E0

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Progrmmierung Bis jetzt kennen wir (fst) nur primitive Dtentypen. Diese entsprechen weitestgehend der Hrdwre des Rechners (z.b. besitzt ein Rechner Hrdwre um zwei flots zu ddieren). Wir

Mehr

Multiplikative Inverse

Multiplikative Inverse Multipliktive Inverse Ein Streifzug durch ds Bruchrechnen in Restklssen von Yimin Ge, Jänner 2006 Viele Leute hben Probleme dbei, Brüche und Restklssen unter einen Hut zu bringen. Dieser kurze Aufstz soll

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 30 Einstieg in die Informatik mit Java Datentypen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 30 1 Überblick 2 Ganzzahlige Typen 3 Gleitkommatypen 4 Zeichen, char

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Literalkonstanten Übersicht 1 Ganzzahlige Konstanten 2 Gleitkommakonstanten 3 Zeichenkonstanten 4 Zeichenketten 5 Boolsche Konstanten 6 null Referenz Literalkonstanten Literalkonstanten

Mehr

Wiederholungen II: for-wiederholungsanweisung

Wiederholungen II: for-wiederholungsanweisung Wiederholungen II: for-wiederholungsnweisung Beispiel I Ausgbe der Qudrtzhlen 1 bis 100 07 - Wiederholungen mit fester Anzhl - for- 2 int i; for(i=1;i

Mehr

Programmieren in C/C++ und MATLAB. Programmieren in C/C++ und MATLAB. Sebastian Bauer Sven Willert Sabine Schmidt

Programmieren in C/C++ und MATLAB. Programmieren in C/C++ und MATLAB. Sebastian Bauer Sven Willert Sabine Schmidt Progrmmieren in C/C und MATLAB Sestin Buer Sven Willert Sine Schmidt Institut für Geowissenschften Christin-Alrechts-Universität zu Kiel Sestin Buer Institut für Geowissenschften Progrmmieren in C/C und

Mehr

Python 1. Vorlesung Computerlinguistische Techniken Alexander Koller. 27. Oktober 2014

Python 1. Vorlesung Computerlinguistische Techniken Alexander Koller. 27. Oktober 2014 Python 1 Vorlesung Computerlinguistische Techniken Alexnder Koller 27. Oktober 2014 Übersicht Rest von hift-reduce Ws ist Python und wrum lernen wir es? Ausdrücke und Anweisungen Komplexe Dtentypen und

Mehr

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata: Informatik mit Java: Gierhardt Zeichenketten bzw. Strings Der Datentyp String Zeichenketten bzw. Strings sind eine häufig benutzte Datenstruktur. Man könnte auch mit Arrays aus Zeichen arbeiten. Da aber

Mehr

c dl SPiC (Teil C, SS 11) 13 Zeiger und Felder 13.1 Zeiger Einführung 13 1 Zeigervariable := Behälter für Verweise ( Adresse) Beispiel int x = 5;

c dl SPiC (Teil C, SS 11) 13 Zeiger und Felder 13.1 Zeiger Einführung 13 1 Zeigervariable := Behälter für Verweise ( Adresse) Beispiel int x = 5; Überblick: Teil C Systemnhe Softwreentwicklung Einordnung: Zeiger (Pointer) Literl: Drstellung eines Wertes 0110 0001 12 Progrmmstruktur und Module Vrible: Bezeichnung chr ; eines Dtenobjekts Behälter

Mehr

Zeichen und Texte. Felder (Arrays) und Zeiger (Pointers) - Teil II. Der Typ char ( character ) Der ASCII-Code. Der ASCII-Code 10/21/12

Zeichen und Texte. Felder (Arrays) und Zeiger (Pointers) - Teil II. Der Typ char ( character ) Der ASCII-Code. Der ASCII-Code 10/21/12 Felder (Arrys) und Zeiger (Pointers) - Teil II Zeichen und Texte n Texte hben wir schon gesehen: std::cout

Mehr

3 Module in C. 4 Gültigkeit von Namen. 5 Globale Variablen (2) Gültig im gesamten Programm

3 Module in C. 4 Gültigkeit von Namen. 5 Globale Variablen (2) Gültig im gesamten Programm 3 Module in C 5 Glole Vrilen!!!.c Quelldteien uf keinen Fll mit Hilfe der #include Anweisung in ndere Quelldteien einkopieren Bevor eine Funktion us einem nderen Modul ufgerufen werden knn, muss sie deklriert

Mehr

BINOMISCHE FORMELN FRANZ LEMMERMEYER

BINOMISCHE FORMELN FRANZ LEMMERMEYER BINOMISCHE FORMELN FRANZ LEMMERMEYER Ds Distributivgesetz. Die binomischen Formeln sind im wesentlichen Vrinten des Distributivgesetzes. Dieses kennen wir schon; es besgt, dss () (b + = b + c und ( + b)c

Mehr

Grundlagen der Algebra

Grundlagen der Algebra PH Bern, Vorbereitungskurs MATHEMATIK Vorkenntnisse 0 Grundlgen der Algebr Einleitung Auf den nchfolgenden Seiten werden grundlegende Begriffe und Ttschen der Algebr erläutert: Zhlenmengen, Rechenopertionen,

Mehr

Einheit 2. Syntax und Semantik Einfache Programme Verzweigungen Schleifen. Syntax und Semantik von Programmiersprachen

Einheit 2. Syntax und Semantik Einfache Programme Verzweigungen Schleifen. Syntax und Semantik von Programmiersprachen Einheit 2 Syntax und Semantik Einfache Programme Verzweigungen Schleifen Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 1 Syntax und Semantik von Programmiersprachen

Mehr

Berechenbarkeitstheorie 4. Vorlesung

Berechenbarkeitstheorie 4. Vorlesung 1 Berechenbrkeitstheorie Dr. Institut für Mthemtische Logik und Grundlgenforschung WWU Münster WS 15/16 Alle Folien unter Cretive Commons Attribution-NonCommercil 3.0 Unported Lizenz. Reguläre Ausdrücke

Mehr

2. Das Rechnen mit ganzen Zahlen (Rechnen in )

2. Das Rechnen mit ganzen Zahlen (Rechnen in ) . Ds Rechnen mit gnzen Zhlen (Rechnen in ).1 Addition und Subtrktion 5 + = 7 Summnd Summnd Summe 5 - = Minuend Subtrhend Differenz In Aussgen mit Vriblen lssen sich nur gleiche Vriblen ddieren bzw. subtrhieren.

Mehr

Mathematik Bruchrechnung Grundwissen und Übungen

Mathematik Bruchrechnung Grundwissen und Übungen Mthemtik Bruchrechnung Grundwissen und Übungen von Stefn Gärtner (Gr) Stefn Gärtner -00 Gr Mthemtik Bruchrechnung Seite Inhlt Inhltsverzeichnis Seite Grundwissen Ws ist ein Bruch? Rtionle Zhlen Q Erweitern

Mehr

18. Algorithmus der Woche Der Euklidische Algorithmus

18. Algorithmus der Woche Der Euklidische Algorithmus 18. Algorithmus der Woche Der Euklidische Algorithmus Autor Friedrich Eisenrnd, Universität Dortmund Heute ehndeln wir den ältesten ereits us Aufzeichnungen us der Antike eknnten Algorithmus. Er wurde

Mehr

5.2 BASIC MSC (BMSC) BASIC MSC. Kommunikation zwischen Instanzen. Message Sequence Charts

5.2 BASIC MSC (BMSC) BASIC MSC. Kommunikation zwischen Instanzen. Message Sequence Charts BASIC MSC Ein System besteht us Instnzen. Eine Instnz ist eine bstrkte Einheit, deren Interktion mit nderen Instnzen oder mit der Umgebung mn (teilweise) beobchten knn. Instnzen kommunizieren untereinnder

Mehr

Das Rechnen mit Logarithmen

Das Rechnen mit Logarithmen Ds Rechnen mit Logrithmen Etw in der 0. Klssenstufe kommt mn in Kontkt mit Logrithmen. Für die, die noch nicht so weit sind oder die, die schon zu weit dvon entfernt sind, hier noch einml ein kleiner Einblick:

Mehr

6. Quadratische Gleichungen

6. Quadratische Gleichungen 6. Qudrtische Gleichungen 6. Vorbemerkungen Potenzieren und Wurzelziehen, somit uch Qudrieren und Ziehen der Qudrtwurzel, sind entgegengesetzte Opertionen. Sie heben sich gegenseitig uf. qudrieren Qudrtwurzel

Mehr

a = c d b Matheunterricht: Gesucht ist x. Physikunterricht Gesucht ist t: s = vt + s0 -s0 s - s0 = vt :v = t 3 = 4x = 4x :4 0,5 = x

a = c d b Matheunterricht: Gesucht ist x. Physikunterricht Gesucht ist t: s = vt + s0 -s0 s - s0 = vt :v = t 3 = 4x = 4x :4 0,5 = x Bltt 1: Hilfe zur Umformung von Gleichungen mit vielen Vriblen Im Mthemtikunterricht hben Sie gelernt, wie mn Gleichungen mit einer Vriblen umformt, um diese Vrible uszurechnen. Meistens hieß sie. In Physik

Mehr

2. Das Rechnen mit ganzen Zahlen (Rechnen in )

2. Das Rechnen mit ganzen Zahlen (Rechnen in ) . Ds Rechnen mit gnzen Zhlen (Rechnen in ).1 Addition und Subtrktion 5 + = 7 Summnd Summnd Summe 5 - = 3 Minuend Subtrhend Differenz In Aussgen mit Vriblen lssen sich nur gleiche Vriblen ddieren bzw. subtrhieren.

Mehr

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Editierdistanz Autor: Sven Schuierer

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Editierdistanz Autor: Sven Schuierer Algorithmen und Dtenstrukturen (Th. Ottmnn und P. Widmyer) Folien: Editierdistnz Autor: Sven Schuierer Institut für Informtik Georges-Köhler-Allee Albert-Ludwigs-Universität Freiburg 1 Editier-Distnz Gegeben:

Mehr

1.6 Bruchterme. 1 Einführung und Repetition 2. 2 Multiplikation und Division von Bruchtermen 3. 3 Die Addition von zwei Bruchtermen-Methode I 3

1.6 Bruchterme. 1 Einführung und Repetition 2. 2 Multiplikation und Division von Bruchtermen 3. 3 Die Addition von zwei Bruchtermen-Methode I 3 .6 Bruchterme Inhltsverzeichnis Einführung und Repetition 2 2 Multipliktion und Division von Bruchtermen 3 3 Die Addition von zwei Bruchtermen-Methode I 3 4 Doppelbrüche 5 5 Die Addition von zwei Bruchtermen

Mehr

Zentrale Fragestellung. Grundsätzliche Überlegungen über die Struktur eines Programms vor Beginn der Programmierung. Verschiedene Design-Methoden

Zentrale Fragestellung. Grundsätzliche Überlegungen über die Struktur eines Programms vor Beginn der Programmierung. Verschiedene Design-Methoden 7 Progrmmstruktur & Module 7Progrmmstruktur & Module 7.1 Softwredesign 7.1 Softwredesign Grundsätzliche Überlegungen über die Struktur eines Progrmms vor Beginn der Progrmmierung Verschiedene Design-Methoden

Mehr

2 Kurzeinführung in die Programmiersprache C 2.7 Programmstruktur & Module. 2 Kurzeinführung in die Programmiersprache C 2.7 Programmstruktur & Module

2 Kurzeinführung in die Programmiersprache C 2.7 Programmstruktur & Module. 2 Kurzeinführung in die Programmiersprache C 2.7 Programmstruktur & Module 2 Kurzeinführung in die Progrmmiersprche C 2.7 Progrmmstruktur & Module 10 Werteustusch zwischen Funktionen Mechnismus Aufrufer Funktion Funktion Aufrufer Prmeter j mit Hilfe von Zeigern Funktionswert

Mehr

Mechanismus Aufrufer Funktion Funktion Aufrufer Parameter ja mit Hilfe von Zeigern Funktionswert nein ja globale Variablen ja ja

Mechanismus Aufrufer Funktion Funktion Aufrufer Parameter ja mit Hilfe von Zeigern Funktionswert nein ja globale Variablen ja ja 2 Kurzeinführung in die Progrmmiersprche C 2.7 Progrmmstruktur & Module 10 Werteustusch zwischen Funktionen Mechnismus Aufrufer Funktion Funktion Aufrufer Prmeter j mit Hilfe von Zeigern Funktionswert

Mehr

Grundlagen zu Datenstrukturen und Algorithmen Schmitt, Schömer SS 2001

Grundlagen zu Datenstrukturen und Algorithmen Schmitt, Schömer SS 2001 Grundlgen zu Dtenstrukturen und Algorithmen Schmitt, Schömer SS 001 http://www.mpi-sb.mpg.de/~sschmitt/info5-ss01 U N S A R I V E R S A V I E I T A S N I S S Lösungsvorschläge für ds 4. Übungsbltt Letzte

Mehr

Informatik I WS 07/08 Tutorium 24

Informatik I WS 07/08 Tutorium 24 Info I Tutorium 24 Informtik I WS 07/08 Tutorium 24 10.01.08 Bstin Molkenthin E-Mil: infotut@sunshine2k.de Web: http://infotut.sunshine2k.de Anmeldung IPK Eine inoffizielle Info-1 Probeklusur findet m

Mehr

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie Gliederun 1. Motivtion / Grundlen 2. Sortierverfhren 3. Elementre Dtenstrukturen / Anwendunen 4. Bäume / Grphen 5. Hshin 6. Alorithmische Geometrie 3/1, Folie 1 2010 Prof. Steffen Lne - HD/FbI - Dtenstrukturen

Mehr

Kapitel 2: Darstellung von Information. Inhalt. Einfache Datentypen (Fortsetzung) Erste Programme (mit Ausgabe) Exkurs: Grammatiken

Kapitel 2: Darstellung von Information. Inhalt. Einfache Datentypen (Fortsetzung) Erste Programme (mit Ausgabe) Exkurs: Grammatiken Kapitel 2: Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Inhalt Einfache Datentypen (Fortsetzung) Erste

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl

Mehr

7-1 Elementare Zahlentheorie. 1 a ist quadratischer Rest modulo p, 1 falls gilt a ist quadratischer Nichtrest modulo p, 0 p a. mod p, so ist.

7-1 Elementare Zahlentheorie. 1 a ist quadratischer Rest modulo p, 1 falls gilt a ist quadratischer Nichtrest modulo p, 0 p a. mod p, so ist. 7-1 Elementre Zhlentheorie 7 Ds udrtische Rezirozitätsgesetz 70 Erinnerung Sei eine ungerde Primzhl, sei Z In 114 wurde ds Legendre-Symbol eingeführt: 1 ist udrtischer Rest modulo, 1 flls gilt ist udrtischer

Mehr

Lineare Algebra und Numerische Mathematik für D-BAUG

Lineare Algebra und Numerische Mathematik für D-BAUG R Käppeli L Herrmnn W Wu Herbstsemester 206 Linere Algebr und Numerische Mthemtik für D-BAUG Beispiellösung für Serie 5 ETH Zürich D-MATH Aufgbe 5 5) Seien u und v Lösungen des LGS Ax = b mit n Unbeknnten

Mehr

Universität Karlsruhe Institut für Theoretische Informatik. Klausur: Informatik III

Universität Karlsruhe Institut für Theoretische Informatik. Klausur: Informatik III Nme Vornme Mtrikelnummer Lösungsvorschlg Universität Krlsruhe Institut für Theoretische Informtik o. Prof. Dr. P. Snders 8. März 2006 Klusur: Informtik III Aufgbe 1. Multiple Choice 10 Punkte Aufgbe 2.

Mehr

Beschreibung von Programmiersprachen. Syntax und Semantik von Programmiersprachen. EBNF (Erweiterte Backus-Naur-Form) Syntax und Semantik von Java

Beschreibung von Programmiersprachen. Syntax und Semantik von Programmiersprachen. EBNF (Erweiterte Backus-Naur-Form) Syntax und Semantik von Java Beschreibung von Programmiersprachen Syntax Regeln, nach denen Sätze gebaut werden dürfen z.b.: Zuweisung = Variable " " Ausdruck. Syntax und Semantik von Programmiersprachen Semantik Bedeutung der Sätze

Mehr

Ich kann LGS mit drei Gleichungen und drei Unbekannten mit dem Gauß-Verfahren lösen.

Ich kann LGS mit drei Gleichungen und drei Unbekannten mit dem Gauß-Verfahren lösen. Klsse 9c Mthemtik Vorbereitung zur Klssenrbeit Nr. m.1.017 Themen: Reelle Zhlen, Qudrtwurzeln LGS mit drei Unbeknnten Checkliste Ws ich lles können soll Ich knn LGS mit drei Gleichungen und drei Unbeknnten

Mehr

13. Erweiterte Konzepte Grundlagen der Programmierung 1 (Java)

13. Erweiterte Konzepte Grundlagen der Programmierung 1 (Java) 13. Erweiterte Konzepte Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 31. Januar 2006 Einordnung im Kontext der

Mehr

4. Das quadratische Reziprozitätsgesetz.

4. Das quadratische Reziprozitätsgesetz. 4-1 Elementre Zhlentheorie 4 Ds udrtische Rezirozitätsgesetz Sei eine ungerde Primzhl, sei Z mit, 1 Frge: Wnn gibt es x Z mit x mod? Gibt es ein derrtiges x, so nennt mn einen udrtischen Rest modulo Legendre

Mehr

Programmieren II Der Kellerspeicher. Programmieren II Der Kellerspeicher. Programmieren II Der Kellerspeicher. Programmieren II Der Kellerspeicher

Programmieren II Der Kellerspeicher. Programmieren II Der Kellerspeicher. Programmieren II Der Kellerspeicher. Programmieren II Der Kellerspeicher Grundlgen Grundlgen Kellerspeicher Anwendungen von Kellerspeichern Relisierung der LIFO-Regel (/ Lst-in-First-out /) Opertionen Erzeugen eines leeren Kellers Einfügen eines Elements x (/ push(x) /) Ausgbe

Mehr

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9 Java Einführung Objekt-Datentypen und Strings Kapitel 8 und 9 Inhalt Was sind Objekt-Datentypen Sonderheiten bei Zuweisung und Vergleich Zeichenketten (Strings) Zeichencodes Char, Char-Arrays und Strings

Mehr

JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network

JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Einheit 2 Syntax und Semantik von Programmiersprachen Syntax und Semantik Sequentielle Programme Verzweigungen Schleifen Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck,

Mehr

Algebra-Training. Theorie & Aufgaben. Serie 3. Bruchrechnen. Theorie: Katharina Lapadula. Aufgaben: Bernhard Marugg. VSGYM / Volksschule Gymnasium

Algebra-Training. Theorie & Aufgaben. Serie 3. Bruchrechnen. Theorie: Katharina Lapadula. Aufgaben: Bernhard Marugg. VSGYM / Volksschule Gymnasium Algebr-Trining Theorie & Aufgben Serie Bruchrechnen Theorie: Kthrin Lpdul Aufgben: Bernhrd Mrugg VSGYM / Volksschule Gymnsium Liebe Schülerin, lieber Schüler Der Leitspruch «Übung mcht den Meister» gilt

Mehr

Datenstrukturen & Algorithmen Lösungen zu Blatt 2 FS 12

Datenstrukturen & Algorithmen Lösungen zu Blatt 2 FS 12 Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérle de Zurich Politecnico federle di Zurigo Federl Institute of Technology t Zurich Institut für Theoretische Informtik 29 Ferur 2012

Mehr

Teil 1: Rechenregeln aus der Mittelstufe. Allgemeine Termumformungen

Teil 1: Rechenregeln aus der Mittelstufe. Allgemeine Termumformungen Teil 1: Rechenregeln us der Mittelstufe Allgemeine Termumformungen Kommuttivgesetz: Bei reinen Produkten oder Summen ist die Reihenfolge egl x y z = z y x = x z y =.. x+y+z = z+y+x = x+z+y =.. Ausklmmern:

Mehr

Kapitel 3: Anweisungen

Kapitel 3: Anweisungen Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II -66 Kapitel : Anweisungen Bedingte Anweisungen (Verzweigungen) Wiederholte Anweisungen (Schleifen) Abweisschleife Durchlaufschleife

Mehr

b) Dasselbe System, die Unbekannten sind diesmal durchnummeriert:

b) Dasselbe System, die Unbekannten sind diesmal durchnummeriert: 1 Linere Gleichungssysteme 1. Begriffe Bspl.: ) 2 x - 3 y + z = 1 3 x - 2 z = 0 Dies ist ein Gleichungssystem mit 3 Unbeknnten ( Vriblen ) und 2 Gleichungen. Die Zhlen vor den Unbeknnten heißen Koeffizienten.

Mehr

26. Mathematik Olympiade 2. Stufe (Kreisolympiade) Klasse 7 Saison 1986/1987 Aufgaben und Lösungen

26. Mathematik Olympiade 2. Stufe (Kreisolympiade) Klasse 7 Saison 1986/1987 Aufgaben und Lösungen 26. Mthemtik Olympide 2. Stufe (Kreisolympide) Klsse 7 Sison 986/987 Aufgben und Lösungen OJM 26. Mthemtik-Olympide 2. Stufe (Kreisolympide) Klsse 7 Aufgben Hinweis: Der Lösungsweg mit Begründungen und

Mehr

Vorkurs Mathematik Frankfurt University Of Applied Sciences, Fachbereich 2 1

Vorkurs Mathematik Frankfurt University Of Applied Sciences, Fachbereich 2 1 Vorkurs Mthemtik Frnkfurt University Of Applied Sciences, Fchbereich 1 Rechnen mit Potenzen N bezeichnet die Menge der ntürlichen Zhlen, Q die Menge der rtionlen Zhlen und R die Menge der reellen Zhlen.

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 11

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 11 Kapitel 11 Zeichenverarbeitung Seite 1 von 11 Zeichenverarbeitung - Jedem Zeichen ist ein Zahlencode zugeordnet. - Dadurch wird ermöglicht, zwischen verschiedenen Systemen Texte auszutauschen. - Es werden

Mehr

Escape-Sequenzen. Dr. Norbert Spangler

Escape-Sequenzen. Dr. Norbert Spangler Escape-Sequenzen Einzelzeichen Bedeutung ASCII- ASCII-Code \a alert BEL 07 \b backspace BS 08 \t horizontal tab HT 09 \n line feed LF 0A \v vertical tab VT 0B \f form feed FF 0C \r carriage return CR 0D

Mehr

Programmieren in C/C++ und Matlab

Programmieren in C/C++ und Matlab Progrmmieren in C/C und Mtl Sine Schmidt & Sestin Buer Institut für Geowissenschften Christin-Alrechts-Universität zu Kiel Progrmmieren in C/C und Mtl CAU, SS 08 for- / while-schleifen: - numerische Integrlerechnung

Mehr

Teil 1: Rechenregeln aus der Mittelstufe in Physik (1.6.18)

Teil 1: Rechenregeln aus der Mittelstufe in Physik (1.6.18) Teil 1: Rechenregeln us der Mittelstufe in Physik (1.6.18) Es gibt einige Dinge, die beim Rechnen in Physik immer wieder ml gebrucht werden. Mnches dvon geht oft schief, weil die Rechenregeln flsch ngewendet

Mehr

Informatik I Modul 3: Schaltnetze

Informatik I Modul 3: Schaltnetze Herbstsemester 2, Institut für Informtik IFI, UZH, Schweiz Informtik I Modul 3: Schltnetze 2 Burkhrd Stiller M3 Modul 3: Schltnetze Einführung in die formlen Grundlgen logischer Beschreibungen Boolesche

Mehr

7.9A. Nullstellensuche nach Newton

7.9A. Nullstellensuche nach Newton 7.9A. Nullstellensuche nch Newton Wir hben früher bemerkt, dß zur Auffindung von Nullstellen einer gegebenen Funktion oft nur Näherungsverfhren helfen. Eine lte, ber wirkungsvolle Methode ist ds Newton-Verfhren

Mehr

1 Symbolisches und approximatives Lösen von Gleichungen

1 Symbolisches und approximatives Lösen von Gleichungen 1 Symbolisches und pproimtives Lösen von Gleichungen von Frnk Schumnn 1.1 Eine hrte Nuss von Gleichung Wir sind zu Gst in einer Privtstunde im Fch Mthemtik, Klssenstufe 11. Anwesende sind Herr Riner Müller-Herbst,

Mehr

Def.: Sei Σ eine Menge von Zeichen. Die Menge Σ* aller Zeichenketten (Wörter) über Σ ist die kleinste Menge, für die gilt:

Def.: Sei Σ eine Menge von Zeichen. Die Menge Σ* aller Zeichenketten (Wörter) über Σ ist die kleinste Menge, für die gilt: 8. Grundlgen der Informtionstheorie 8.1 Informtionsgehlt, Entropie, Redundnz Def.: Sei Σ eine Menge von Zeichen. Die Menge Σ* ller Zeichenketten (Wörter) über Σ ist die kleinste Menge, für die gilt: 1.

Mehr

ÜBUNGEN ZUR VORLESUNG ZAHLENTHEORIE, SS 2018

ÜBUNGEN ZUR VORLESUNG ZAHLENTHEORIE, SS 2018 ÜBUNGEN ZUR VORLESUNG ZAHLENTHEORIE, SS 2018 KARLHEINZ GRÖCHENIG So wie Sort Trining erfordert, erfordert Mthemtik ds selbständige Lösen von Übungsufgben. Ds wesentliche n den Übungen ist ds Selbermchen!

Mehr

Problem: Gliederung betrifft nur die Aktivitäten, nicht die Struktur der Daten

Problem: Gliederung betrifft nur die Aktivitäten, nicht die Struktur der Daten 7Progrmmstruktur 2. & Module 1 Softwredesign Grundsätzliche Überlegungen über die Struktur eines Progrmms vor Beginn der Progrmmierung Verschiedene Design-Methoden Top-down Entwurf / Prozedurle Progrmmierung

Mehr

Vorlesung. Einführung in die mathematische Sprache und naive Mengenlehre

Vorlesung. Einführung in die mathematische Sprache und naive Mengenlehre Vorlesung Einführung in die mthemtische Sprche und nive Mengenlehre 1 Allgemeines RUD26 Erwin-Schrödinger-Zentrum (ESZ) RUD25 Johnn-von-Neumnn-Hus Fchschft Menge ller Studenten eines Institutes Fchschftsrt

Mehr

Endliche Automaten 7. Endliche Automaten

Endliche Automaten 7. Endliche Automaten Endliche Automten 7 Endliche Automten Einfches Modellierungswekzeug (z.b. UML-Sttechrts) Verrbeiten Wörter/Ereignisfolgen Erkennen Sprchen Erluben schnelle Sprcherkennung Anwendungsbereiche: Objektorientierte

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage

Mehr

4. Lineare Gleichungen mit einer Variablen

4. Lineare Gleichungen mit einer Variablen 4. Linere Gleichungen mit einer Vrilen 4. Einleitung Werden zwei Terme einnder gleichgesetzt, sprechen wir von einer Gleichung. Enthlten eide Terme nur Zhlen, so entsteht eine Aussge, die whr oder flsch

Mehr

Objektorientierte Programmierung. Objektorientierte Programmierung. Objektorientierte Programmierung. Objektorientierte Programmierung

Objektorientierte Programmierung. Objektorientierte Programmierung. Objektorientierte Programmierung. Objektorientierte Programmierung Ojektorientierte Progrmmierung Bis jetzt kennen wir (fst) nur primitive Dtentypen. Ojektorientierte Progrmmierung Angenommen wir möchten eine Adressverwltung schreien. Dzu müßten wir zunächst eine Adresse

Mehr

1. Voraussetzung. 2. Erste Schritte 2.1. Web-Account anlegen Einloggen

1. Voraussetzung. 2. Erste Schritte 2.1. Web-Account anlegen Einloggen Toll Collect Serviceprtner-Portl ANLEITUNG Inhlt 1. Vorussetzung 2. Erste Schritte 2.1. Web-Account nlegen 2. 2. Einloggen 3. Serviceprtner-Portl verwenden 3.1. Überblick (Strtseite) 3.2. Fhrzeugdten suchen

Mehr

Kapitel 1 : Mathematische Grundlagen und Stöchiometrie

Kapitel 1 : Mathematische Grundlagen und Stöchiometrie pitel : Mthemtische Grundlgen und Stöchiometrie Elementre Rechenumformungen. Dreistzrechnung : Immer dnn, wenn zwei Meßgrößen zueinnder proportionl bzw. indirekt proportionl (d.h. die eine proportionl

Mehr

1.6 Bruchterme. 1 Theorie Lernziele Repetition Die Addition von zwei Bruchtermen-Methode I Doppelbrüche...

1.6 Bruchterme. 1 Theorie Lernziele Repetition Die Addition von zwei Bruchtermen-Methode I Doppelbrüche... .6 Bruchterme Inhltsverzeichnis Theorie. Lernziele............................................ Repetition............................................3 Die Addition von zwei Bruchtermen-Methode I.......................

Mehr

Softwareentwicklung 1 UE-Stunde 01 - Algorithmen

Softwareentwicklung 1 UE-Stunde 01 - Algorithmen Softwareentwicklung 1 UE-Stunde 01 - Algorithmen Dr. Herbert Prähofer Institut für Systemwissenschaften Johannes Kepler Universität Linz Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer

Mehr

Mathematik K1, 2017 Lösungen Vorbereitung KA 1

Mathematik K1, 2017 Lösungen Vorbereitung KA 1 Mthemtik K, 07 Lösungen Vorbereitung KA Pflichtteil (etw 0..0 min) Ohne Tschenrechner und ohne Formelsmmlung (Dieser Teil muss mit den Lösungen bgegeben sein, ehe der GTR und die Formlsmmlung verwendet

Mehr

Einführung in die Programmierung Wintersemester 2008/09

Einführung in die Programmierung Wintersemester 2008/09 Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Darstellung von Information Inhalt Einfache Datentypen

Mehr

Begriffe: Addition Subtraktion Multiplikation Division. Summe Differenz Produkt Quotient a + b a b a b a : b

Begriffe: Addition Subtraktion Multiplikation Division. Summe Differenz Produkt Quotient a + b a b a b a : b Grundlgen 0.0. Zhlbereiche ntürliche Zhlen: N = {0; ; 2;...} (nch DIN 547) N = N \ {0} gnze Zhlen: Z = {... 2; ; 0; ; 2;...} rtionle Zhlen: Q = { p p, q Z, q 0} q Q besteht us llen Bruchzhlen. reelle Zhlen:

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen der Theoretischen Informatik Grundlgen der Theoretischen Informtik 3. Endliche Automten (II) 28.04.2016 Vioric Sofronie-Stokkermns e-mil: sofronie@uni-koblenz.de 1 Übersicht 1. Motivtion 2. Terminologie 3. Endliche Automten und reguläre

Mehr

Finite-State Technology

Finite-State Technology Finite-Stte Technology Teil IV: Automten (2. Teil) 1 Definition eines -NEA Ein -NEA ist ein Quintupel A = (Q,, δ, q0, F), wobei Q = eine endliche Menge von Zuständen = eine endliche Menge von Eingbesymbolen

Mehr

Theoretische Informatik. Äquivalenzsatz und Anwendungen

Theoretische Informatik. Äquivalenzsatz und Anwendungen Theoretische Informtik Äquivlenzstz und Anwendungen Reguläre Sprchen reguläre Ausdrücke NFA DFA regulärer Ausdruck Äquivlenzstz für reguläre Sprchen flex Reguläre Ausdrücke Gegeben: Regulärer Ausdruck

Mehr

Verlauf Material LEK Glossar Lösungen. In acht Leveln zum Meister! Exponentialgleichungen lösen. Kerstin Langer, Kiel VORANSICHT

Verlauf Material LEK Glossar Lösungen. In acht Leveln zum Meister! Exponentialgleichungen lösen. Kerstin Langer, Kiel VORANSICHT Eponentilgleichungen lösen Reihe 0 S Verluf Mteril LEK Glossr Lösungen In cht Leveln zum Meister! Eponentilgleichungen lösen Kerstin Lnger, Kiel Klsse: Duer: Inhlt: Ihr Plus: 0 (G8) 5 Stunden Eponentilgleichungen

Mehr

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2011

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2011 Automten und Formle Sprchen lis Theoretische Informtik Sommersemester 011 Dr. Snder Bruggink Üungsleitung: Jn Stückrth Snder Bruggink Automten und Formle Sprchen 1 Reguläre Sprchen Wir eschäftigen uns

Mehr

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen. Themen der Übung Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 9.10.01 1 Bedingte Anweisungen Vergleiche und logische Operatoren 3 Fallunterscheidungen 4 Zeichen und Zeichenketten

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage

Mehr

- 1 - VB Inhaltsverzeichnis

- 1 - VB Inhaltsverzeichnis - - VB Inhltsverzeichnis Inhltsverzeichnis... Die Inverse einer Mtrix.... Definition der Einheitsmtrix.... Bedingung für die inverse Mtrix.... Berechnung der Inversen Mtrix..... Ds Verfhren nch Guß mit

Mehr

Integrieren. Regeln. Einige Integrale die man auswendig kennen sollte. Partielle Integration

Integrieren. Regeln. Einige Integrale die man auswendig kennen sollte. Partielle Integration Integrieren Regeln (f() + g())d = f()d + g()d c f()d = c f()d b f()d = f()d b Einige Integrle die mn uswendig kennen sollte s d = s + s+ + C (für s ) d = ln + C cos d = sin + C sin d = cos + C sinh d =

Mehr