TAG 3: FUNKTIONEN, EVENTS, ARRAYS, EXKURS: SPEICHERVERWALTUNG Brückenkurs Programmierung SoSe 16

Ähnliche Dokumente
6 Speicherorganisation

Graphic Coding. Klausur. 9. Februar Kurs A

Repetitorium Informatik (Java)

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Eine schnelle Processing-Einführung. von Thomas Rau

Processing Info zu Variablen und Bedingungen

Objektorientierte Programmierung

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

FHZ. K20 Arrays. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

Welche Informatik-Kenntnisse bringen Sie mit?

JAVA - Methoden

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Einführung in die Programmierung 1

AuD-Tafelübung T-B5b

Die Programmiersprache C Eine Einführung

Programmierung mit C Zeiger

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Speicher und Adressraum

Programmieren Übung! Meine ersten Schritte als ProgrammiererIn! Prolog 2014 Stefan Podlipnig, TU Wien

Programmierkurs. Manfred Jackel

Selbsteinstufungstest Vorkurs Programmieren

JAVA - Methoden - Rekursion

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

JAVA-Datentypen und deren Wertebereich

RO-Tutorien 3 / 6 / 12

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 1: Grundlagen

Methoden (fortgeschritten) in C# - 1

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

Javakurs für Anfänger

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Java Einführung Klassendefinitionen

Programmierkurs Java

Präzedenz von Operatoren

Algorithmen und Programmierung II

Algorithmen und Datenstrukturen

5. Tutorium zu Programmieren

FHZ. Man unterscheidet ein- und mehrdimensionale Arrays. Bei einem mehrdimensionalen Array sind die Komponenten wiederum Arrays.

Deklarationen in C. Prof. Dr. Margarita Esponda

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Was passiert, wenn Button "Ok?" mit Maus angeklickt?

Grundkurs Software- Entwicklung mit C++

Einstieg in die Informatik mit Java

Java Virtual Machine (JVM) Bytecode

Theorie zu Übung 8 Implementierung in Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Propädeutikum zur Programmierung

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

5.4 Klassen und Objekte

Einstieg in die Informatik mit Java

Probeklausur: Programmierung WS04/05

Grafikprogrammierung mit Java Teil 1/2

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Der Datentyp String. Stringvariable und -vergleiche

Informatik. Studiengang Chemische Technologie. Michael Roth Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013.

Klassen mit Instanzmethoden

Objektorientierte Programmierung

Programmiertechnik Klassenmethoden

C# im Vergleich zu Java

Objekt-Orientierte Programmierung

Java Einführung Methoden in Klassen

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden

Modellierung und Programmierung 1

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Programmieren I. Kapitel 5. Kontrollfluss

Vorkurs C++ Programmierung

Einführung in die Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Vorlesung Programmieren

Rekursive Funktionen

Objektorientierte Programmierung OOP Programmieren mit Java

Algorithmen zur Datenanalyse in C++

Primitive Datentypen

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmieren in Java

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Objektorientierte Programmierung

Einführung in die Programmierung für NF. Übung 08

Software Engineering Klassendiagramme Einführung

Programmierkurs Python I

Objektorientierte Programmierung. Kapitel 12: Interfaces

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Javakurs zu Informatik I. Henning Heitkötter

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Erwin Grüner

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

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

Grundlagen der Informatik Enums, Strings und Arrays

1. Übung zu "Numerik partieller Differentialgleichungen"

JAVA - Zufallszahlen

Prototyping Augmented Reality

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Transkript:

TAG 3: FUNKTIONEN, EVENTS, ARRAYS, EXKURS: SPEICHERVERWALTUNG Brückenkurs Programmierung SoSe 16 Toni Barthel

Organisatorisches I Themen: Tag 1: Variablen Operatoren, Verzweigungen Tag 2: Animationen, Schleifen Tag 3: Funktionen, Events, Arrays, Exkurs: Speicherverwaltung Tag 4: Objektorientierung, Ausblick auf Java und C Heute: Wiederholung Tag 2 Nicht so viel Mathe wie gestern! Wir Blicken hinter die Kulissen. Heute schon Funktionen!

Organisatorisches II Tagesablauf: Zwei Vorlesungsblöcke (ca. 90min), 15min Kaffeepause Neuankömmlinge melden sich bitte in der Pause bei mir Kursunterlagen Uns ist positiv aufgefallen: Lerngruppen Anwesend in den Tutorien Aufmerksamkeit http://bit.ly/1zhffby Brückenkurs Programmierung WiSe 15/16 - Toni Barthel

TAG3.0: WIEDERHOLUNG Brückenkurs Programmierung SoSe 16 Toni Barthel

WDH: Ablaufsteuerung I Formulieren Sie das abgebildete Flussdiagramm als Anweisungsabfolge. Antwort while(x>5){ x=x+2;

WDH: Ablaufsteuerung II Formulieren Sie das abgebildete Flussdiagramm als Anweisungsabfolge. Antwort for (i=0; i<5; i++) { //Anweisung

WDH: Processing Wie erzeugen Sie eine zufällige Zahl im Wertebereich von 15 bis 50 mit der Programmiersprache Processing? random(15,50); Welche zwei Standardfunktionen haben Sie bisher kennengelernt? void setup () { und void draw () { Definieren Sie eine beliebige Farbe und initialisieren sie diese als Variable. col meinefarbe = col(15,125,35);

WDH: Processing Zeichnen Sie eine einfache Linienabfolge mit maximal 10 Stück. Die erste Linie liegt bei: A(0,0)-A (400,0). Alle folgenden Linien sind um 10 Punkte versetzt. size(400, 650); background(255); strokeweight(2); // Einfache Linien for (int y = 0; y < 100; y = y + 10) { line(0, y, height, y);

WDH: Processing Zeichnen Sie eine nicht bestimmte Anzahl einer Linienabfolge. Die erste Linie liegt bei: A(0,0)-A (400,0). Alle folgenden Linien sind um 10 Punkte versetzt. size(400, 650); background(255); strokeweight(2); // Einfache Linien int y = 0; while(y<height) { line(0, y, height, y); y = y + 10;

TAG 3.1: FUNKTIONEN Brückenkurs Programmierung SoSe 16 Toni Barthel

Funktionen Mathematik Zuordnung Argumentwert(e) -> Ergebniswert Beispiel: f(x) = a + 2x Informatik / Programmierung Zusammenfassung von Anweisungen die von Argumentwerten abhängen (können) Einen Ergebniswert produzieren (können) Hilft QuellCode zu vereinfachen und zu strukturieren Hinweis: Dopplungen sind ein Hinweis zur Verwendung von Funktionen ;-) int getmax(int x, int y) { return x > y? x : y; int geuniversalnumber() { return 42;

Funktionsdefinition Funktionskopf Funktionsname Funktionsparameter auch formale Funktionsargumente Funktionskörper Code, Sammlung von Anweisungen Funktionsergebnis Rückgabewert return ;

Funktionsaufruf Funktionsname Funktionsargument auch aktuelle Funktionsargumente int mymin = 4; int myintvalue = max(17,mymin); Unterscheidung der Begrifflichkeit: Funktion / Methode Wenn static davor steht, handelt es sich um eine Funktionoder statische Methode, ansonsten ist es eine Methode. static int geuniversalnumber() { return 42; Funktion int geuniversalnumber() { return 42; Methode

Funktionen und Variablen Hinweise zur Verwendung von Funktionen Eine Methode (Funktion) kann beliebig viele Variablendefinitionen und Anweisungen enthalten. Sie endet mit return oder der letzten Anweisung float entfernungzummittelpunkt(float x, float y) { float d = dist(x, y, width/2, height/2); // gebe das ergbenis zurück return d;

Funktionen ohne Rückgabewert Funktionen ohne Rückgabewert einfachste Form, erledigen Aufgaben mit dem Schlüsselwort void (engl. leer) markiert geben kein Ergebnis zurück Parameter beliebig viele Parameter jede Variable kann (muss aber nicht!) ein Parameter sein void setup() { void setup() { void draw() { zeichneellipse(); void zeichneellipse() { ellipse(50, 50, 50, 50); void draw() { // Funktionsaufruf mit zwei Parametern zeichneellipse(25, 25); zeichneellipse(75, 75); // Funktion mit zwei float Parametern void zeichneellipse(float x, float y) { ellipse(x, y, 50, 50);

Funktionen MIT Rückgabewert Funktionen mit Rückgabewert erledigen Aufgaben und geben einen Wert zurück komplizierte Berechnungen, etc. Statt void also z.b. int, float, String das Ergebnis wird nach Abschluss aller nötigen Schritte mit dem Schlüsselwort return zurück void setup() { background(255); fill(0); void draw() { background(255); float d = entfernungzummittelpunkt(mousex, mousey); ellipse(50, 50, d, d); // berechnet die Entfernung // von einem Punkt (x, y Parameter) // zum Mittelpunkt der Anwendung float entfernungzummittelpunkt(float x, float y) { float d = dist(x, y, width/2, height/2); // gebe das Ergebnis zurück return d;

Anwendungsbeispiel void draw () { // draw thick, dark x stroke (80); strokeweight (20); line (50, 40, 110, 105); line (110, 40, 50, 105); // draw medium, light gray x stroke (210); strokeweight (10); line (150, 140, 210, 200); line (210, 140, 150, 200); void setup () { size (320, 240); background (0); smooth (); noloop (); // draw thin, white x stroke (255); strokeweight (2); line (50, 140, 110, 200); line (110, 140, 50, 200);

Anwendungsbeispiel I void setup () { size (320, 240); background (0); smooth (); noloop (); void draw () { drawcross (50, 40, 60, 80, 20); drawcross (150, 140, 60, 210, 10); drawcross (50, 140, 60, 255, 2); void drawcross (float thex, float they, float thesize, int thegrey, float theweight) { stroke (thegrey); strokeweight (theweight); line (thex, they, thex+thesize, they+thesize); line (thex+thesize, they, thex, they+thesize);

Anwendungsbeispiel II void setup () { size (320, 240); background (0); smooth (); noloop (); void draw () { for(int i=0; i < 70; i++) { drawcross (random (width), random (height), random (10, 100), int (random (40, 255)), random (1, 18)); void drawcross (float thex, float they, float thesize, int thegrey, float theweight) { stroke (thegrey); strokeweight (theweight); line (thex, they, thex+thesize, they+thesize); line (thex+thesize, they, thex, they+thesize);

Zusammenfassung Funktionen 1. Unser Code wird kürzer und übersichtlicher. 2. Wir brauchen Codeteile nicht immer und immer wieder zu schreiben, was die Fehlerquote senkt. Prinzip der Modularität Dieses Prinzip, komplexe Aufgaben in ihre Grundbestandteile zu gliedern, um diese später einfach wiederverwenden zu können, bezeichnet man als Modularität.

TAG 3.2: EVENTS (FUNKTIONEN IN PROCESSING) Brückenkurs Programmierung SoSe 16 Toni Barthel

Wie Entsteht ein Event?

Funktionen In PROCESSING II In Processing gibt es viele Funktionen. Einige davon haben wir bisher benutzt ohne uns genauer damit zu beschäftigen. setup() - wird einmal zu Beginn des Programms ausgeführtvoid draw() - wird, je nach framerate() pro Sekunde ausgeführt (default 60 Frames pro Sekunde) - Hauptteil unseres Processing Programms mousepressed() - wird einmal ausgeführt, wenn die Maus gedrückt wird (Vergleiche dazu mousepressed) keypressed() - wird einmal ausgeführt, wenn eine Taste auf der Tastatur gedrückt wird (Vergleiche dazu keypressed)

Funktionen In PROCESSING II void mouseclicked() { // Aktion wenn die Maus geklickt wurde void mousepressed() { // Aktion wenn die Maus geklickt ist void mousereleased() { // Aktion wenn eine Maustaste losgelassen wird. void mousemoved() { // Aktion wenn sich die Maus bewegt void mousedragged() { // Aktion wenn die Maus geklickt ist und bewegt wird

Funktionen In PROCESSING II void mousepressed() { background(100, 100, 0); text( Maus wurde gedrückt", width/2, height/2); if ( mousebutton == LEFT) { text("und es war ein links Klick", width/2, height/2 + 40); if (mousebutton == RIGHT) { text("und es war ein rechts Klick", width/2, height/2 + 40); void setup() { size(400, 400); background(0); textalign(center); textsize(24); fill(255); text( Nichts passiert!, width/2, height/2); void draw() { void mousereleased() { background(100, 0, 100); text("maus wurde los gelassen., width/2, height/2); void mousemoved() { background(150, 10, 70); text("maus wurde bewegt", width/2, height/2); void mousedragged() { background(10, 70, 100); text("maustaste ist gedrückt und wird bewegt., width/2, height/2);

TAG 3.3: ARRAYS Brückenkurs Programmierung SoSe 16 Toni Barthel

Wie Speichern wir viele Werte? Was macht man, wenn ein Programm viele Werte speichern muss? viele Werte speichern viele Variablen definieren genauso unpraktikabel wie Schleifen auszuschreiben Anzahl benötigter Variablen evtl. zu Beginn unbekannt Es werden am besten Variable von variabler Größe benötigt nur wie?

Arrays Definition: Ein Array ist eine Variable, die mehrere Werte vom gleichen Typ enthält. Syntax: <typ>[] name = new <typ>[<size>]; Beispiel: float[] a = new float[3]; int[] b = new int[]{1,2,4 Zugriff: b[0] = 1; a[1+1] = 3.4; Zugriff: int x = b[0]; println(a[x+1]); int n = a.length;

Arrays als Regale

Arrays im Einsatz & Ausgabe auf der Konsole String[] array = {"Alles", "aus", "der", "Liste"; for (int i=0; i < array.length; i = i + 1) { print (array[i] + " ");

Arrays im Einsatz der Theorie Fragestellung: Welche Ausgabe können Sie erwarten? Zeigen Sie ihre Lösung Schritt für Schritt! import java.util.*; int felda[] = {1, 2, 3, 4, 5, 6, 7, 8, 9; int a = 5; felda[2] = felda[a+felda[0]]-felda[a]; print(arrays.tostring(felda));

Arrays im Einsatz der Theorie int felda[] = {1,2,3,4,5,6,7,8,9; int a = 5; 0 1 2 3 4 5 6 7 8 felda[2] = felda[a+felda[0]]-felda[a]; felda[a+ 1 ]-felda[a] felda[5+ 1 ]-felda[a] felda[2]= felda[ 6 ]-felda[a] felda[ 6 ]-felda[a] 7 -felda[a] 7 -felda[5] 7-6 {1,2,1,4,5,6,7,8,9 Ausgabe: [1,2,1,4,5,6,7,8,9]

TAG 3.4: EXKURS WERT- UND REFERENSEMANTIK Brückenkurs Programmierung SoSe 16 Toni Barthel

Unterschied Primitive - und Referenztypen Erinnerung: Processing (Java) unterscheidet zwischen primitiven Typen (z.b. int) und Referenztypen (Arrays und Klassen). primitiver Typ: Variable enthält Wert bei Zuweisung wird der Wert direkt kopiert Stack Referenztyp: Variable enthält Referenz bzw. Zeiger verweist auf Speicherstelle an der die Daten liegen bei Zuweisung wird nur die Referenz kopiert die Daten bleiben die selben Heap

Stack und Heap (Einführung) Stack (Stapel) Auf dem Stack werden Parameter und alle lokalen Variablen aller gerade aktiven Methoden verwaltet. (Parameter und Lokale Variablen leben nur für die Dauer der Aktivität der Methode) Heap (Haufen) Auf dem Heap werden Objekte verwaltet (unter anderem mit new angelegt). Der Inhalt der Referenzvariablen verweisen auf den Speicherort der Objekte im Heap. Ein Array ist ein Objekt. liste% check% str% c% a% args% Stack& false% 'm'% 5% 0 0 0 0 0 "abc"... Heap&

Beispiel zu Stack und Heap mit einem Array public static void main(string[] args) { int[] a = {1, 2, 3, 4; int[] b = {10, 20, 30, 40;... 10 20 30 40 b" a" args" Stack& 1 2 3 4... Heap&

Aufräumen des Heap Der Garbage Collector reinigt den Heap vom Müll Verfolgt systematisch alle Referenzen und markiert diese Nicht markierte Objekte können weggeräumt werden, da keine Referenzvariable auf diese Objekte zeigt Das Wegräumen nicht benötigter Objekte erfolgt automatischin regelmäßigen Abständen Wenn das Programm knapp an Speicher ist Kann Programmlauf jederzeit unterbrechen, weil er gerade mal Lust hat aufzuräumen! b" a" args" 10 20 30 40 1 2 3 4... Gleich'fahre' ich'wieder'im' Heap'rund'und' sammle'allen' Abfall' Stack& Heap& Carbage&Collector&

Wert- vs Referenzsemantik: Zusammenfassung Der Inhalt von Variablen unterscheidet sich je nach dem, welchen Typ die Variable hat. primitiver Typ: Variable enthält Wert bei Zuweisung wird der Wert direkt kopiert Referenztyp: Variable enthält Referenz bzw. Zeiger verweist auf Speicherstelle an der die Daten liegen bei Zuweisung wird nur die Referenz kopiert die Daten bleiben die selben ist keine Referenz mehr auf ein Objekt vorhanden, wird dieses über die Carbage Collection aufgeräumt

Zusammenfassung I setup() draw() mousepressed() mousemoved() mousereleased() keypressed() Theorie: unterschied primitive und komplexe Datentypen Speicherverwaltung (Stack, Heap) Aufräumen des Speichers -> Carbage Collection Array-Syntax: <typ>[] name = new <typ>[<size>]; Beispiel: float[] a = new float[3]; int[] b = new int[]{1,2,4 Zugriff: b[0] = 1; a[1+1] = 3.4; Zugriff: int x = b[0]; println(a[x+1]); int n = a.length;

HERZLICHEN DANK FÜR IHRE AUFMERKSAMKEIT Toni Barthel