Zusammenfassung: Programmieren 2 (C#)

Ähnliche Dokumente
Neue Features in C# 2.0

Einführung in C# Teil 3. Matthias Nübling

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Besonderheiten von C#

Kapitel 9 Schnittstellen

Fragenkatalog ESOP WS 16/17

Listen. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang. WS 07/08

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Algorithmen und Datenstrukturen 07

Einheitliches Typsystem

Programmieren I. Kapitel 13. Listen

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

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

16. Dynamische Datenstrukturen

Prüfung Softwareentwicklung II (IB)

Einführung in die Informatik 1

Vorkurs Informatik WiSe 15/16

Vererbung und Polymorphie

Methoden (fortgeschritten) in C# - 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

13. Dynamische Datenstrukturen

Java I Vorlesung Collections

Universität Karlsruhe (TH)

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Algorithmen und Datenstrukturen

II.4.5 Generische Datentypen - 1 -

10. Felder (Arrays) Teil 2. Java-Beispiele: Echo.java Primzahlen.java Monate.java. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Software Entwicklung 1

II.4.4 Exceptions - 1 -

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Einfache Datentypen in JAVA

Einstieg in die Informatik mit Java

Praxis der Programmierung

Programmieren in Java

12 Abstrakte Klassen, finale Klassen und Interfaces

Grundlagen der Informatik

Objektorientierte Programmierung und Modellierung

Fallstudie: Online-Statistik

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Polymorphismus 179. Function.h. #include <string>

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Praxis der Programmierung

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Programmierung WS12/13 Lösung - Präsenzübung M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Objektorientierte Programmierung mit C++ SS 2007

Sprachkonstrukte Verzweigungen und Array-Strukturen

Variablen und Parameter

Collections und Generics

Klausur Programmieren 2 SS 2016

ADT: Verkettete Listen

Abgabe: (vor 12 Uhr)

C++ - Objektorientierte Programmierung Polymorphie

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Programmierung WS14/15 Lösung - Präsenzübung C. Aschermann, F. Frohn, J. Hensel, T. Ströder

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

4.4.1 Implementierung vollständiger Bäume mit Feldern. Reguläre Struktur: Nachfolger des Knoten i sind die Knoten 2*i und 2*i+1.

Ordnung im Materiallager: Datenstrukturen II. Suchen und Sortieren im Array Verkettete Listen Rekursion

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Programmieren in Java -Eingangstest-

Transkript:

Zusammenfassung: Programmieren 2 (C#) Arrays Eindimensional int[] feld; feld = new int[2]; int[] feld2 = new int[3]; int[] feld3 = new int[] 1, 2, 3 ; //oder int[] feld4 = 1, 2, 3 ; int laenge = feld3.length; Mehrdimensional int[][] matrix = new int[2][]; //Ausgefranst matrix[0] = new int[2]; matrix[1] = new int[4]; matrix[0][1] = 33; Console.WriteLine(matrix[0].Length); //Ausgabe: 2 int[,] tabelle = new int[2, 3]; //Rechteckig, 2 Zeilen und 3 Spalten tabelle[1, 2] = 23; Console.WriteLine(tabelle.GetLength(1)); //Ausgabe: 3 (Anzahl Spalten) Console.WriteLine(tabelle.Length); //Ausgabe: 6 (2*3) File IO var inputfile = new FileStream( "/etc/pacman.conf", FileMode.Open, FileAccess.Read); var outputfile = new FileStream ( "./pacman.conf.bak", FileMode.Create); var reader = new StreamReader(inputFile); var writer = new StreamWriter(outputFile); string line; while((line = reader.readline())!= null) writer.writeline (line); inputfile.close (); outputfile.close (); Seite 1 von 5

Template-Syntax Für Klassen class Foo<T> Für einzelne Methoden T[] Foo<T>(T[] array,t val) Methoden voraussetzen class Foo<T> : Base, IForClass where T : IForT (Klasse) Methoden voraussetzen Foo<T>(T[] array, T val) where T : IForT (einzelne Methode) Konstruktor class Bar<T> where T : new() voraussetzen Arrays als Typ static public void SwapElements<T> (T[] array, int i1, int i2) Delegates, Lambdaausdrücke und Events Deklaration von Delegatentyp Notation eines konkreten Delegates delegate bool Foo(int bar); Foo del = delegate(int bar) return bar == 42; ; Notation mit Lambda-Ausdruck Foo del = (int bar) => return bar == 42; ; Notation mit Lambda-Ausdruck (einzelner Ausdruck) Deklaration von Event Überschreiben vs. Überdecken Foo del = (int bar) => bar == 42; event Foo MyEvent; Methode überschreibbar machen virtual void Foo() Methode überschreibbar machen (komplett abstrakt) virtual void Foo(); Methode überschreiben override void Foo(); explizites Verdecken new void Foo(); explizites Verdecken und neue Methode new virtual void Foo(); überschreibbar machen abstrakte Methode deklarieren public abstract void F(); abstrakte Methode implementieren (braucht kein public void F()... override!) Erweiterungsmethoden static class MainClass public static void Foo(this ToBeExtended t) Die Priorität von normalen Methoden ist höher als die von Erweiterungsmethoden. Die einschließende Klasse muss static sein. Seite 2 von 5

Operatoren überladen public static Vektor operator + (Vektor v_a, Vektor v_b) return new Vektor(v_a.x + v_b.x, v_a.y + v_b.y); public static implicit operator double(vektor v) return Math.Sqrt(v.x*v.x+v.y*v.y); public static bool operator true (Vektor v) return!v.isnull(); Überladen werden können: +, -,!, ~, ++, --, true, false, *, /, %, &,, ^, <<, >>, ==,!=, <, >, <=, >= Operatoren für implizite und explizite Konvertierungen können definiert werden (zweites Beispiel). Vergleichsoperatoren == und!= müssen paarweise überladen werden. Mindestens einer der Operanden muss vom eigenen Typen sein. Wenn Operator wie + überladen wird, wird auch entsprechender Operator automatisch += überladen. Indexer public int this[int i] get return zahlen[i]; set zahlen[i] = value; Enumeratoren Interfacedefinitionen namespace System.Collections public interface IEnumerator object Current get; bool MoveNext (); void Reset (); public interface IEnumerable IEnumerator GetEnumerator (); Seite 3 von 5

Beispiel für einfach verkettete Liste und Enumeratoren class ForwardList<T>: System.Collections.Generic.IEnumerable<T> // Inneres Listenelement class ListElement<T> public ListElement<T> Next; public T Value; public ListElement (T value, ListElement<T> next) Next = next; Value = value; ListElement<T> m_first; ListElement<T> m_last; //Beispiele für Einfügen public void PushFront (T value) var newelement = new ListElement<T> (value, m_first); m_first = newelement; if (m_last == null) public void PushBack (T value) var newelement = new ListElement<T> (value, null); if (m_last!= null) m_last.next = newelement; if (m_first == null) m_first = newelement; //Beispiel für Traversierung. public void PrintAll () for (var current = m_first; current!= null; current = current.next) Console.WriteLine (current.value); // Element an bestimmter Position einfügen public void Insert (int pos, T value) //Sonderfall index 0 if (pos == 0) m_first = new ListElement<T> (value, m_first); Seite 4 von 5

int i = 1; var current = m_first; while (current!= null) if (pos == i) var newelement = new ListElement<T> (value, current.next); if (current.next == null) current.next = newelement; current = current.next; ++i; throw new IndexOutOfRangeException (); // Element an bestimmter Position löschen public void Remove (int pos) //Sonderfall index 0 if (pos == 0) m_first = m_first.next; int i = 1; ListElement<T> current = m_first; // Achtung: Andere Abbruchbedingung als bei InsertAt while (current.next!= null) if (pos == i) if (current.next.next == null) current.next = null; m_last = current; else current.next = current.next.next; current = current.next; ++i; throw new IndexOutOfRangeException (); // Implementierung von IEnumerator mit yield return. public System.Collections.Generic.IEnumerator<T> GetEnumerator () for (var current = m_first; current!= null; current = current.next) yield return current.value; // Implementierung von nicht-generischem IEnumerator System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator () return this.getenumerator (); Seite 5 von 5