Real-Life Template Meta-Programmierung

Größe: px
Ab Seite anzeigen:

Download "Real-Life Template Meta-Programmierung"

Transkript

1 Meeting C Real-Life Template Meta-Programmierung Detlef Wilkening / 85

2 Einleitung Es geht los Typ-Container Typ-Funktionen Passende Typen Funktions-Existenz Fazit Literatur 2 / 85

3 Einleitung 3 / 85

4 Was meint eigentlich "Meta-Programmierung"? Der Programmierer schreibt nicht selber das Programm Sondern er "beschreibt" nur, was er gerne hätte Ein "Generator" generiert dann, was er möchte Im Idealfall also ein "Do, what I mean Button" Aber davon sind wir noch sehr weit entfernt 4 / 85

5 Warum will man das machen? Einfacherer Code Denn ich muß nicht alles hinschreiben Wartbarer und lesbarer Code Denn ich muß mich nicht um alle Details kümmern und kann auf einem "höheren Level" programmieren Performanterer und speichereffizienterer Code Denn der Generator weiß mehr als ich und behält den Überblick und generiert den "optimalen Code" 5 / 85

6 Für uns (in C++) sehr wichtig: Der Generator arbeitet zur Entwicklungs-Zeit Nicht zur Laufzeit Denn ansonsten ist das Ergebnis nicht performant und speichersparend Zur Laufzeit kann man auch sehr schöne Meta-Dinge machen Aber die sind meist langsam und speicherfressend 6 / 85

7 Generatoren gibt es viele Modell-Orientiertes Programmieren ist ja Hype Gerade auch im Java/Eclipse Umfeld Sicher auch woanders Gibt sogar ganze Lehrstühle die daraus ihre Berechtigung beziehen Aber extra Generatoren sind hier nicht unser Thema In C++ sind zwei Entwicklungs-Zeit Generatoren eingebaut Teil jedes C++ Compilers Präprozessor C++ Template Mechanismen 7 / 85

8 Präprozessor Beschränkt in seinen Fähigkeiten Kennt die Sprache nicht Ignoriert viele Sprach-Elemente Läuft noch vor dem eigentlichen Compiler ab Ist mehr ein intelligentes Find&Replace auf Text-Basis Kann aber -im Gegensatz zu Templates -gut mit Texten umgehen Hat von daher auch seine Einsatz-Bereiche In Boost gibt es die "Preprocessor Metaprogramming Lib" Wir wollen den Präprozessor hier aber ignorieren Obwohl er einige Beispiele in realem Code vereinfachen könnte 8 / 85

9 C++ Template-Mechanismen Mechanismus in der Sprache C++, der Parameter (meist Typ-Parameter) bekommt und dann nach festen Regeln aus der Vorlage (dem Template-Code) unter Berücksichtigung der Sprach-Regeln Code generiert. Dies gilt schon für einfachste Funktions-Templates template<class T> T min(t lhs, T rhs) { return lhs<rhs? lhs : rhs; } 9 / 85

10 Es gibt auch Leute Die reden schon bei einfachsten Templates von Template Meta-Programmierung Und irgendwie haben sie ja auch Recht Aber keine Angst Ich will Sie nun nicht mit einfachstem Template-Code langweilen Spezialisierungen sollten sie schon kennen Aber keine Angst Es wird auch nicht ganz schlimm Das würde ich ja selber nicht verstehen Ganz im Gegenteil Etwas tiefergehende Template-Kenntnisse wie z.b. Template / 85

11 Für mich beginnt Meta-Programmierung da, Wo mehr passiert als einfach nur Typ-Parameter durch Typ-Argumente zu ersetzen Das hätte ja auch schon der Präprozessor halbwegs gekonnt Für mich heißt Meta-Programmierung Ich programmiere Entscheidungen oder Iterationen Die dann aber zur Entwicklungs-Zeit ausgewertet werden Und abhängig von denen unterschiedlicher Code erzeugt wird Eben Meta Programmierung Das geht, da C++ Templates Turing-Complete sind Daher es gibt z.b. Entscheidungen, und via Rekursion auch Iterationen 11 / 85

12 Template Meta-Programmierung in den meisten Lehrbüchern Fast alle C++ Lehrbücher stellen heute TMP vor Gut :-) Meist an dem typischen Fakultäts-Beispiel Berechnung der Fakultät zur Compile-Zeit Schauen wir uns das einmal an 12 / 85

13 template<int N> struct Factorial { static const int value = N * Factorial<N-1>::value; }; template<> struct Factorial<1> { static const int value = 1; }; 13 / 85

14 int main() { cout << Factorial<1>::value << endl; // => 1 cout << Factorial<2>::value << endl; // => 2 cout << Factorial<3>::value << endl; // => 6 cout << Factorial<4>::value << endl; // => 24 cout << Factorial<5>::value << endl; // => 120 cout << Factorial<6>::value << endl; // => 720 cout << Factorial<7>::value << endl; // => 5040 cout << Factorial<8>::value << endl; // => } 14 / 85

15 Gar keine Frage Das ist Template Meta-Programmierung Die Fakultät wird rekursiv (die funktionale Schleife) berechnet Und über Spezialisierung als "If" wird das Rekursions-Ende erkannt und dann abgebrochen 15 / 85

16 Aber mal ehrlich Wer hat je die Fakultät zur Compilezeit berechnet benötigt? Das ist eher selten der Fall Ja, ich kann mir auch Fälle vorstellen - aber im Normalfall Didaktisch ist das eher Unsinn Wie Rekursion anhand der Fakultät einzuführen Und dann sagt man den Studenten direkt Bitte implementiert die Fakultät nicht so Nehmt lieber eine Schleife Was denkt der Student dann? "Muß wohl wirklich ein sinnvolles Feature sein" 16 / 85

17 So ging es mir auch vor Jahren mit TMP Und das ist meine Motivation für den Vortrag Ein bisschen zu zeigen, was man im "Real-Life" mit Template-Meta-Programmierung machen kann Das was im Rahmen des Vortrags möglich ist Und noch ein Hinweis bevor es los geht Alle diese Beispiele kann man auch anders mit implementieren Auch TMP ist Programmierung und da führen viele Wege zum Ziel Ich habe versucht, die einfachsten Wege zu nutzen Andere sind aber leistungsfähiger, flexibler, allgemeiner, Mir ging es hier um "Einfachheit um relative Einfachheit Also nicht wundern, wenn Sie das woanders anders sehen 17 / 85

18 Es geht los 18 / 85

19 Lassen Sie uns mit dem ersten Real-Life Beispiel anfangen Aber vorher müssen wir einige Grundlagen kennen lernen Typ-Listen und Typ-Arrays Templates "rechnen" in erster Linie mit Typen Und darum müssen wir erstmal lernen, Typen zu "speichern" und Typ-Mengen zu bearbeiten 19 / 85

20 Typ-Paare Die einfachste Form, zwei unterschiedlich Typen zu speichern ist das Typ-Paar template<class T1, class T2> struct TypePair { typedef T1 Type1; typedef T2 Type2; }; 20 / 85

21 Aus der funktionalen Programmierung wissen wir Mit Typ-Paaren kann man eine Liste aufbauen Eine Liste besteht aus dem Kopf (-Typ) und dem Rest (Typen) Außerdem muß es noch einen speziellen Abschluß Typ geben Verzeigerung auf das nächste Element ist "Null" 21 / 85

22 struct End {}; template<class T1, class T2> struct TypePair { typedef T1 Head; typedef T2 Tail; }; [int, long, bool] => typedef TypePair<int, TypePair<long, TypePair<bool, End>>> tl; => tl.tail.head <=> "long" 22 / 85

23 Typ-Listen Bauen sich rekursiv auf Können dadurch beliebig lang werden Sind für unsere einfachen Beispiele leider etwas zu kompliziert Darum nehmen wir jetzt lieber Typ-Arrays Typ-Arrays Template mit max. Aufnahme von Typen In unserem Beispiel für die Übersichtlichkeit bis zu 5 Typen Nicht genutzte Typen werden mit "Empty" belegt 23 / 85

24 struct Empty {}; template< class T0 = Empty, class T1 = Empty, class T2 = Empty, class T3 = Empty, class T4 = Empty> struct TypeArray { }; typedef T0 Type0; typedef T1 Type1; typedef T2 Type2; typedef T3 Type3; typedef T4 Type4; 24 / 85

25 Was kann man nun mit Typ-Arrays machen? Z.B. auf den n-ten Typ zugreifen Vergleichbar dem Index-Zugriff [] in ein Array oder Vektor Hierfür gibt es viele Lösungs-Möglichkeiten Wir schauen uns einmal 2 typische Lösungen an At1 & At2 At1 Nutzt die Spezialisierung auf den Index Funktioniert nur mit Typ-Arrays At2 Ist funktional umgesetzt Funktioniert in analoger Form auch für Typ-Listen Achtung - wir kümmern uns nicht um Fehler-Behandlung Gilt für alle Beispiele, sprengt unseren Rahmen 25 / 85

26 template<class T, size_t Idx> struct At1 { }; template<class T> struct At1<T, 0> { typedef typename T::Type0 Type; }; template<class T> struct At1<T, 1> { typedef typename T::Type1 Type; }; 26 / 85

27 template<class T> struct At1<T, 2> { typedef typename T::Type2 Type; }; template<class T> struct At1<T, 3> { typedef typename T::Type3 Type; }; template<class T> struct At1<T, 4> { typedef typename T::Type4 Type; }; 27 / 85

28 typedef TypeArray<short, int, long> TA; cout << "TA[0]: " << typeid(at1<ta, 0>::Type).name(); cout << "TA[1]: " << typeid(at1<ta, 1>::Type).name(); cout << "TA[2]: " << typeid(at1<ta, 2>::Type).name(); => TA[0]: short TA[1]: int TA[2]: long 28 / 85

29 Für die funktionale Lösung "At2" benötigen wir 2 Hilfen GetHead Gib den ersten Typ zurück GetTail Gib den Rest des Typ-Arrays zurück Natürlich als Typ-Array Also alles ausser dem ersten Element 29 / 85

30 template<class T> struct GetHead { typedef typename T::Type0 Type; }; template<class T> struct GetTail { typedef TypeArray < typename T::Type1, typename T::Type2, typename T::Type3, typename T::Type4 > Type; }; 30 / 85

31 cout << typeid(gethead<ta>::type).name(); cout << typeid(gettail<ta>::type).name(); cout << typeid(gethead<gettail<ta>::type>::type).name(); cout << typeid(gethead<gettail<gettail<ta>::type>::type>::type).name(); => short TypeArray<int,long,Empty,Empty,Empty> int long 31 / 85

32 Mit GetHead und GetTail läßt sich jetzt "At2" einfach implementieren template<class T, size_t Idx> struct At2 { typedef typename At2<typename GetTail<T>::Type, Idx-1>::Type Type; }; template<class T> struct At2<T, 0> { typedef typename GetHead<T>::Type Type; }; 32 / 85

33 typedef TypeArray<short, int, long> TA; cout << "TA[0]: " << typeid(at2<ta, 0>::Type).name(); cout << "TA[1]: " << typeid(at2<ta, 1>::Type).name(); cout << "TA[2]: " << typeid(at2<ta, 2>::Type).name(); => TA[0]: short TA[1]: int TA[2]: long 33 / 85

34 Vergleichbar zu "At", "GetHead" und "GetTail" lassen sich auch andere Funktionalitäten implementieren Reverse PushFront, PushBack Erase Find Wie STL Algorithmen Aber das machen wir jetzt nicht Viel mehr als das Bisherige brauchen wir für unsere Beispiele nicht 34 / 85

35 Eins fehlt uns noch für unser Real-Life Beispiel Eine If-Abfrage Natürlich zur Compile-Zeit Daher sind die True-und False-Zweige keine Zweige sondern True- und False-Typen Die Bedingung ist natürlich weiterhin ein Boolscher-Ausdruck Aber Achtung Die muß zur Compile-Zeit auswertbar sein Also kein Laufzeit-Ausdruck 35 / 85

36 template<bool Expr, class TrueType, class FalseType> struct TypeIf { typedef TrueType Type; }; template<class TrueType, class FalseType> struct TypeIf<false, TrueType, FalseType> { typedef FalseType Type; }; 36 / 85

37 cout << typeid( TypeIf<sizeof(char)==1, int, double>::type).name() << endl; cout << typeid(typeif<sizeof(int)==1, int, double>::type).name() << endl; => int double 37 / 85

38 So, jetzt haben wir alles zusammen für das wahre Leben Sie kennen das alle: In C++ ist die Größe der elementaren Datentypen nicht festgelegt Nur "char" ist 1 Byte groß Aber wie groß ist ein Byte? Diese Frage wollen wir hier erstmal ignorieren Jetzt wollen Sie wirklich portablen Code schreiben Und Sie benötigen einen Typ mit genau 2 Byte Welchen nehmen Sie? Hier kann der Compiler helfen Denn er kennt die Größen der Typen Wir müssen ihm nur sagen, was er nehmen soll Fangen wir mit diesmal mit dem Ergebnis an: Wir betrachten hier nur Signed-Typen! Unsigned und andere Dinge sind Erweiterungen für Sie zuhause ;-) 38 / 85

39 cout << "signed char: " << sizeof(signed char) << " - " << typeid(signed char).name() << endl; cout << "short: " << sizeof(short) << " - " << typeid(short).name() << endl; cout << "int: " << sizeof(int) << " - " << typeid(int).name() << endl; cout << "long: " << sizeof(long) << " - " << typeid(long).name() << endl; cout << "long long: " << sizeof(long long) << " - " << typeid(long long).name() << endl; 39 / 85

40 typedef SignedEquals<1>::Type s1; typedef SignedEquals<2>::Type s2; typedef SignedEquals<4>::Type s4; typedef SignedEquals<8>::Type s8; cout<< "s1: " << sizeof(s1) << " - " << typeid(s1).name(); cout<< "s2: " << sizeof(s2) << " - " << typeid(s2).name(); cout<< "s4: " << sizeof(s4) << " - " << typeid(s4).name(); cout<< "s8: " << sizeof(s8) << " - " << typeid(s8).name(); 40 / 85

41 => (z.b. RTTI Namen sind nicht genormt) signed char: 1 - signed char short: 2 - short int: 4 - int long: 4 - long long long: 8 - int64 s1: 1 - signed char s2: 2 - short s4: 4 - int s8: 8 - int / 85

42 Unser Ziel ist also ein Typ "SignedEquals<Bits>" "typedef SignedEquals<1>::Type s1; Der exakt soviel Bytes hat wie als Parameter angegeben Als erstes brauchen wir also eine Liste der verfügbaren Signed-Typen Klingt nach einem Typ-Array Und da wir 5 Signed-Typen haben, benötigen wir ein Typ-Array, was mindestens 5 Typen aufnehmen kann Was für ein Zufall -unser Typ-Array kann 5 Typen Hinweis: die Typen müssen ihrer Größe nach angeben werden Man könnte sie auch selber sortieren - aber das sprengt hier unseren Rahmen 42 / 85

43 typedef TypeArray<signed char, short, int, long, long long> SignedTypes; 43 / 85

44 Und jetzt müssen wir nur von vorne nach hinten über das Typ- Array laufen und schauen welcher Typ exakt paßt Laufen von vorne nach hinten => Rekursion mit GetHead und GetTail Passender Typ => TypeIf 44 / 85

45 template<class T, size_t Bytes> struct FindEquals { typedef typename GetHead<T>::Type Head; typedef typename GetTail<T>::Type Tail; static const bool equals = sizeof(head) == Bytes; }; typedef typename TypeIf<equals, Head, typename FindEquals<Tail, Bytes>::Type>::Type Type; template<size_t Bytes> struct FindEquals <TypeArray<Empty, Empty, Empty, Empty, Empty>, Bytes> { typedef void Type; }; 45 / 85

46 Und damit es etwas einfacher zu nutzen ist Typ "SignedEquals" Verbindet die Signed-Typen im Typ-Array mit der Suche " FindEquals Eigentlich eine Aufgabe für C++11 Type-Aliase Die neue C++11 Form von Typedefs Aber ich wollte hier noch C++03 unterstützen Das Idiom hier nennt man auch Type-Generator Template-Typedef template<size_t Bytes> struct SignedEquals : FindEquals<SignedTypes, Bytes> { }; 46 / 85

47 Fertig :-) 47 / 85

48 Aber lassen Sie uns das Beispiel etwas praxis-gerechter machen Wir geben die Byte-Zahl an, die wir mindestens brauchen Fast die gleiche Lösung, nur unsere Bedinung im TypeIf wird anders 48 / 85

49 template<class T, size_t Bytes> struct FindAtLeast { typedef typename GetHead<T>::Type Head; typedef typename GetTail<T>::Type Tail; static const bool enough = sizeof(head) >= Bytes; }; typedef typename TypeIf<enough, Head, typename FindAtLeast<Tail, Bytes>::Type>::Type Type; template<size_t Bytes> struct FindAtLeast <TypeArray<Empty, Empty, Empty, Empty, Empty>, Bytes> { typedef void Type; }; 49 / 85

50 typedef SignedAtLeast<1>::Type s1; typedef SignedAtLeast<2>::Type s2; typedef SignedAtLeast<3>::Type s3; typedef SignedAtLeast<4>::Type s4; typedef SignedAtLeast<5>::Type s5; typedef SignedAtLeast<6>::Type s6; typedef SignedAtLeast<8>::Type s8; cout << "s1: " << sizeof(s1) << " - " << typeid(s1).name(); cout << "s2: " << sizeof(s2) << " - " << typeid(s2).name(); cout << "s3: " << sizeof(s3) << " - " << typeid(s3).name(); cout << "s4: " << sizeof(s4) << " - " << typeid(s4).name(); cout << "s5: " << sizeof(s5) << " - " << typeid(s5).name(); cout << "s6: " << sizeof(s6) << " - " << typeid(s6).name(); cout << "s8: " << sizeof(s8) << " - " << typeid(s8).name(); 50 / 85

51 => (z.b. RTTI Namen sind nicht genormt) s1: 1 - signed char s2: 2 - short s3: 4 - int s4: 4 - int s5: 8 - int64 s6: 8 - int64 s8: 8 - int / 85

52 Was würde man im echten Leben noch ergänzen? Umschreiben auf Bit-Größe Wirklich Plattform-Unabhängig Fehler-Behandlung Was wenn es keinen passenden Typen gibt? Unsigned-Typen integrieren Grenzen statt Größen angeben Angabe von gefordertem Min und Max Wert Klasse BigInt für noch größere Zahlen integrieren 52 / 85

53 Funktions-Existenz 53 / 85

54 Probleme: Man muß eine Funktion aufrufen, wenn sie da ist Wenn nicht, dann nicht aufrufen Beispiele: 2-stufige Konstruktion mit zusätzlichem "init()" After- und Before-Methoden Invarianten-Tests Wie schreibt man generischen Code? Oder es gibt mehrere mögliche Funktionen Gibt es eine spezielle, dann nimmt man die Ansonsten die allgemeine Beispiel: Im Vektor sucht man mit dem Algorithmus "find" Der funktioniert zwar auch beim Set, aber dort nimmt man besser die Element-Funktion "find" des "Sets Schwierig, eine allgemein beste Lösung zu schreiben 54 / 85

55 Also: wie erkenne ich, ob eine Funktion da ist Der Rest - unterschiedliches Verhalten - sollte dann einfach sein Z.B. Verhalten in einen Typ legen und TypeIf nutzen Geht auch anders (besser), aber sprengt wieder unseren Rahmen Lösung: SFINAE und Meta-Programmierung 55 / 85

56 SFINAE Substitution Failure is not an Error Instanziierung von Klassen-Templates Generierung Aller Member-Signaturen auf Klassen-Level Aller zwingend benötigten Funktions-Rümpfe Ist bei den Member-Signaturen ein Fehler, und wird dieser Member nicht zwingend benötigt so wird er aus der Menge der möglicherweise zu nutzenden Member rausgenommen 56 / 85

57 template<typename T> struct HasInitFct { typedef char Yes[1]; typedef char No[2]; template<typename U, U> struct SignatureCheck; template<typename V> static Yes& check(signaturecheck<void(t::*)(), &V::init>*); template<typename> static No& check(...); }; static bool const result = (sizeof(check<t>(0)) == 1); 57 / 85

58 Hinweise Das Ergebnis findet sich in der Variable result Für die Unterscheidung werden die Aufrufe der überladenen Funktion check genommen Damit klar ist, welche Funktion genommen wird, wird die Rückgabe eindeutig unterscheidbar gemacht. Yes ist genau 1 Byte groß No ist genau 2 Byte groß Da Funktionen keine Arrays zurückgeben können, werden Referenzen zurückgegeben Die Ellipse paßt auf jeden Zeiger, aber der konkrete Zeiger in der Yes-Check Funktion paßt prinzipiell besser Hat der Typ T keine passende Funktion, so ist die Yes-Funktions-Signatur ungültig SFINAE wird ausgeschlossen 58 / 85

59 struct NoInit { }; struct WithInit { void init() {} }; 59 / 85

60 cout << boolalpha; cout << "NoInit -> " << HasInitFct<NoInit>::result; cout << "WithInit -> " << HasInitFct<WithInit>::result; => NoInit -> false WithInit -> true 60 / 85

61 Problem Funktioniert nicht mit Vererbung 61 / 85

62 struct NoInit { }; struct WithInit { void init() {} }; struct InheritedInit : WithInit { }; struct DoubleInheritedInit : InheritedInit { }; 62 / 85

63 cout << boolalpha; cout << "NoInit -> " << HasInitFct<NoInit>::result; cout << "WithInit -> " << HasInitFct<WithInit>::result; cout << " InhInit -> " << HasInitFct<Inhe...Init>::result; cout << "DInhInit -> " << HasInitFct<Doubl...Init>::result; => NoInit -> false WithInit -> true InhInit -> false DInhInit -> false 63 / 85

64 Lösung Eigene lokale Klasse, die von T und einer lokalen Mixin-Klasse erbt Die Mixin-Klasse hat die Funktion => Die lokale Mixed Klasse erbt die Funktion von der Mixin-Klasse Hat aber T die Funktion auch (direkt oder geerbt), dann wird die Funktion zweimal geerbt => Ohne klare Entscheidung für eine der geerbten Funktionen ist das fehlerhaft => SFINAE => Funktion wird ausgeschlossen => Ellipsen-Check Funktion gewinnt Hinweis Yes und No sind hier zwischen den Check-Funktionen getauscht worden 64 / 85

65 template<typename T> struct HasRealInitFct { typedef char Yes[1]; typedef char No[2]; struct Mixin { void init(){} }; struct Mixed : public T, public Mixin {}; template<typename U, U> struct SigCheck; template<typename V> static No& check(sigcheck<void(mixin::*)(), &V::init>*); template<typename> static Yes& check(...); }; static bool const result = (sizeof(check<mixed>(0))==1); 65 / 85

66 cout << boolalpha; cout << "NoInit -> " << HasRealInitFct<NoInit>::result; cout << "WithInit -> " << HasRealInitFct<WithInit>::result; cout << " InhInit -> " << HasRealInitFct<I...Init>::result; cout << "DInhInit -> " << HasRealInitFct<D...Init>::result; => NoInit -> false WithInit -> true InhInit -> true DInhInit -> true 66 / 85

67 Bezogen auf unser Vector/Set Beispiel Ist die Funktion iterator find(const value_type&) vorhanden? Ja => Nimm sie Nein => Nimm Algorithmus 67 / 85

68 template<typename T> struct HasFindFct { typedef char Yes[1]; typedef char No[2]; typedef typename T::value_type val; typedef typename T::iterator iter; 68 / 85

69 struct Mixin { iter find(const val&) {} }; struct Mixed : public T, public Mixin {}; template<typename U, U> struct SigCheck; template<typename V> static No& check (SigCheck<iter(Mixin::*)(const value&), &V::find>*); template<typename> static Yes& check(...); }; static bool const result = (sizeof(check<mixed>(0))==1); 69 / 85

70 struct FindAlgo { template<class T> static bool contains (T& con, const typename T::value_type& value) { auto fit = find(begin(con), end(con), value); return fit!=end(con); } }; 70 / 85

71 struct FindMemberFct { template<class T> static bool contains (T& con, const typename T::value_type& value) { typename T::iterator fit = con.find(value); return fit!=end(con); } }; 71 / 85

72 template<class T> bool contains (T& container, const typename T::value_type& value) { typedef typename TypeIf<HasFindFct<T>::result, FindMemberFct, FindAlgo>::Type Type; return Type::contains(container, value); } 72 / 85

73 Fazit 73 / 85

74 TMP ist fast wie normales Programmieren, nur Objekte => Typen Funktionen => Klassen Überladen => Partielle Spezialisierung Return => Public static Typen oder Werte Funktoren => Template-Template-Parameter Lokale Variablen => Private Typen oder Werte Schleifen => Rekursion mit Stopp durch Spezialisierung Kontrollstrukturen => Partielle Spezialisierungen Fehlerhandling => Extra Error-Template-Parameter Compiler-Fehler 74 / 85

75 Und in der Realität muß man sich die Infrastruktur nicht selber schreiben Vieles gibt es schon fertig, z.b. Boost Enable-If Boost MPL Boost Proto Boost Function-Types Boost Fusion 75 / 85

76 TMP wird zur Compile-Zeit ausgeführt Daher wir können nur Dinge durch TMP verbessern, die zur Compile-Zeit schon festlegen Dafür ist hier der ideale Zeitpunkt, um Performance zu gewinnen Wenn Dinge erst zur Laufzeit feststehen, dann ist TMP eher selten hilfreich 76 / 85

77 Was kann man denn zur Compile-Zeit schon machen? (1) Vorberechnung von Werten Z.B. Sin-, Cos-, Fak-Tabellen Wahl des richtigen Typen Siehe SignedAtLeast Beispiel Algorithmen-Anpassungen an den Typen Memcpy statt Operator = bei PODs Kopie- oder Referenz-Übergaben (bzw. Rückgaben) Algorithmen-Auswahl anhand von Typen (Iterator-Kategorien) Größen (Sort-Algorithmus bei Arrays fester Größe) Ausrollen von Schleifen Z.B. beim Setzen von Containern oder anderen Mengen 77 / 85

78 Was kann man denn zur Compile-Zeit schon machen? (2) Ablauf-Änderungen in Abhängigkeit von Member-Existenz Siehe Beispiel Funktions-Existenz Domain Specific Embeded Languages (DSELs) Sub-Sprache eingebettet in C++ für speziellen Fach-Probleme Expression-Templates Boost.Spirit Boost.Expressive Anpassungen von Plattform-Spezifika Typ-Abhängiges Verhalten Traits DB-Schnittstellen Config-API Numeric-Limits 78 / 85

79 Denken Sie bei Problemen (Herausforderungen) immer darüber nach Sind alle Parameter schon zur Compile-Zeit bekannt Dann müßte das Problem doch mit TMP lösbar sein Immer wenn Sie programmieren: Dann geschieht das zur Compile-Zeit Treffen Sie Entscheidungen, die der Compiler für Sie treffen könnte? Treffen sollte? Da er mehr weiss, und nichts vergißt? 79 / 85

80 Literatur 80 / 85

81 C++ Templates Nicolai M. Josuttis David Vandevoorde Addison-Wesley Longman ISBN-13: / 85

82 Modern C++ Design Andrei Alexandrescu Addison-Wesley Longman mitp ISBN-13: / 85

83 Advanced C++ Metaprogramming Davide Di Gennaro CreateSpace Independent Publishing Platform ISBN-13: / 85

84 C++ Template Metaprogramming David Abrahams Aleksey Gurtovoy Addison-Wesley Longman ISBN-13: / 85

85 Fragen? 85 / 85

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt 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 - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

Das Leitbild vom Verein WIR

Das Leitbild vom Verein WIR Das Leitbild vom Verein WIR Dieses Zeichen ist ein Gütesiegel. Texte mit diesem Gütesiegel sind leicht verständlich. Leicht Lesen gibt es in drei Stufen. B1: leicht verständlich A2: noch leichter verständlich

Mehr

Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut wird, dass sie für sich selbst sprechen können Von Susanne Göbel und Josef Ströbl

Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut wird, dass sie für sich selbst sprechen können Von Susanne Göbel und Josef Ströbl Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut Von Susanne Göbel und Josef Ströbl Die Ideen der Persönlichen Zukunftsplanung stammen aus Nordamerika. Dort werden Zukunftsplanungen schon

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger [email protected] WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Papa - was ist American Dream?

Papa - was ist American Dream? Papa - was ist American Dream? Das heißt Amerikanischer Traum. Ja, das weiß ich, aber was heißt das? Der [wpseo]amerikanische Traum[/wpseo] heißt, dass jeder Mensch allein durch harte Arbeit und Willenskraft

Mehr

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit Frau Dr. Eva Douma ist Organisations-Beraterin in Frankfurt am Main Das ist eine Zusammen-Fassung des Vortrages: Busines

Mehr

Was meinen die Leute eigentlich mit: Grexit?

Was meinen die Leute eigentlich mit: Grexit? Was meinen die Leute eigentlich mit: Grexit? Grexit sind eigentlich 2 Wörter. 1. Griechenland 2. Exit Exit ist ein englisches Wort. Es bedeutet: Ausgang. Aber was haben diese 2 Sachen mit-einander zu tun?

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation Einführung Mit welchen Erwartungen gehen Jugendliche eigentlich in ihre Ausbildung? Wir haben zu dieser Frage einmal die Meinungen von Auszubildenden

Mehr

Leichte-Sprache-Bilder

Leichte-Sprache-Bilder Leichte-Sprache-Bilder Reinhild Kassing Information - So geht es 1. Bilder gucken 2. anmelden für Probe-Bilder 3. Bilder bestellen 4. Rechnung bezahlen 5. Bilder runterladen 6. neue Bilder vorschlagen

Mehr

Anleitung über den Umgang mit Schildern

Anleitung über den Umgang mit Schildern Anleitung über den Umgang mit Schildern -Vorwort -Wo bekommt man Schilder? -Wo und wie speichert man die Schilder? -Wie füge ich die Schilder in meinen Track ein? -Welche Bauteile kann man noch für Schilder

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung Anleitung zur Daten zur Datensicherung und Datenrücksicherung Datensicherung Es gibt drei Möglichkeiten der Datensicherung. Zwei davon sind in Ges eingebaut, die dritte ist eine manuelle Möglichkeit. In

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Was ist Sozial-Raum-Orientierung?

Was ist Sozial-Raum-Orientierung? Was ist Sozial-Raum-Orientierung? Dr. Wolfgang Hinte Universität Duisburg-Essen Institut für Stadt-Entwicklung und Sozial-Raum-Orientierte Arbeit Das ist eine Zusammen-Fassung des Vortrages: Sozialräume

Mehr

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt

Mehr

Gutes Leben was ist das?

Gutes Leben was ist das? Lukas Bayer Jahrgangsstufe 12 Im Hirschgarten 1 67435 Neustadt Kurfürst-Ruprecht-Gymnasium Landwehrstraße22 67433 Neustadt a. d. Weinstraße Gutes Leben was ist das? Gutes Leben für alle was genau ist das

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Das Persönliche Budget in verständlicher Sprache

Das Persönliche Budget in verständlicher Sprache Das Persönliche Budget in verständlicher Sprache Das Persönliche Budget mehr Selbstbestimmung, mehr Selbstständigkeit, mehr Selbstbewusstsein! Dieser Text soll den behinderten Menschen in Westfalen-Lippe,

Mehr

Wir machen neue Politik für Baden-Württemberg

Wir machen neue Politik für Baden-Württemberg Wir machen neue Politik für Baden-Württemberg Am 27. März 2011 haben die Menschen in Baden-Württemberg gewählt. Sie wollten eine andere Politik als vorher. Die Menschen haben die GRÜNEN und die SPD in

Mehr

Was ich als Bürgermeister für Lübbecke tun möchte

Was ich als Bürgermeister für Lübbecke tun möchte Wahlprogramm in leichter Sprache Was ich als Bürgermeister für Lübbecke tun möchte Hallo, ich bin Dirk Raddy! Ich bin 47 Jahre alt. Ich wohne in Hüllhorst. Ich mache gerne Sport. Ich fahre gerne Ski. Ich

Mehr

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

ONLINE-AKADEMIE. Diplomierter NLP Anwender für Schule und Unterricht Ziele ONLINE-AKADEMIE Ziele Wenn man von Menschen hört, die etwas Großartiges in ihrem Leben geleistet haben, erfahren wir oft, dass diese ihr Ziel über Jahre verfolgt haben oder diesen Wunsch schon bereits

Mehr

! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006

!  # $  % & Nicki Wruck worldwidewruck 08.02.2006 !"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst

Mehr

Informationen zum Ambulant Betreuten Wohnen in leichter Sprache

Informationen zum Ambulant Betreuten Wohnen in leichter Sprache Informationen zum Ambulant Betreuten Wohnen in leichter Sprache Arbeiterwohlfahrt Kreisverband Siegen - Wittgenstein/ Olpe 1 Diese Information hat geschrieben: Arbeiterwohlfahrt Stephanie Schür Koblenzer

Mehr

Und im Bereich Lernschwächen kommen sie, wenn sie merken, das Kind hat Probleme beim Rechnen oder Lesen und Schreiben.

Und im Bereich Lernschwächen kommen sie, wenn sie merken, das Kind hat Probleme beim Rechnen oder Lesen und Schreiben. 5.e. PDF zur Hördatei und Herr Kennedy zum Thema: Unsere Erfahrungen in der Kennedy-Schule Teil 2 Herr Kennedy, Sie haben eine Nachhilfeschule in der schwerpunktmäßig an Lernschwächen wie Lese-Rechtschreibschwäche,

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

2. Semester, 2. Prüfung, Lösung

2. Semester, 2. Prüfung, Lösung 2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter

Mehr

Wenn man nach Beendigung der WINDOWS-SICHERUNG folgendes angezeigt bekommt

Wenn man nach Beendigung der WINDOWS-SICHERUNG folgendes angezeigt bekommt 1. Für alle, die mit wenig zufrieden sind Wenn man nach Beendigung der WINDOWS-SICHERUNG folgendes angezeigt bekommt Bild 1 bekommt man erst mal einen Schreck. Die Meldung wurden nicht gesichert beunruhigt,

Mehr

Wie halte ich Ordnung auf meiner Festplatte?

Wie halte ich Ordnung auf meiner Festplatte? Wie halte ich Ordnung auf meiner Festplatte? Was hältst du von folgender Ordnung? Du hast zu Hause einen Schrank. Alles was dir im Wege ist, Zeitungen, Briefe, schmutzige Wäsche, Essensreste, Küchenabfälle,

Mehr

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten Das große x -4 Alles über das Wer kann beantragen? Generell kann jeder beantragen! Eltern (Mütter UND Väter), die schon während ihrer Elternzeit wieder in Teilzeit arbeiten möchten. Eltern, die während

Mehr

Erst Lesen dann Kaufen

Erst Lesen dann Kaufen Erst Lesen dann Kaufen ebook Das Geheimnis des Geld verdienens Wenn am Ende des Geldes noch viel Monat übrig ist - so geht s den meisten Leuten. Sind Sie in Ihrem Job zufrieden - oder würden Sie lieber

Mehr

Das Thema von diesem Text ist: Geld-Verwaltung für Menschen mit Lernschwierigkeiten

Das Thema von diesem Text ist: Geld-Verwaltung für Menschen mit Lernschwierigkeiten Das Thema von diesem Text ist: Geld-Verwaltung für Menschen mit Lernschwierigkeiten Dieser Text ist von Monika Rauchberger. Monika Rauchberger ist die Projekt-Leiterin von Wibs. Wibs ist eine Beratungs-Stelle

Mehr

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 Referentin: Dr. Kelly Neudorfer Universität Hohenheim Was wir jetzt besprechen werden ist eine Frage, mit denen viele

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

Mehr

Zwischenablage (Bilder, Texte,...)

Zwischenablage (Bilder, Texte,...) Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen

Mehr

Schritte 4. Lesetexte 13. Kosten für ein Girokonto vergleichen. 1. Was passt? Ordnen Sie zu.

Schritte 4. Lesetexte 13. Kosten für ein Girokonto vergleichen. 1. Was passt? Ordnen Sie zu. Kosten für ein Girokonto vergleichen 1. Was passt? Ordnen Sie zu. a. die Buchung, -en b. die Auszahlung, -en c. der Dauerauftrag, - e d. die Überweisung, -en e. die Filiale, -n f. der Kontoauszug, - e

Mehr

Erklärung zum Internet-Bestellschein

Erklärung zum Internet-Bestellschein Erklärung zum Internet-Bestellschein Herzlich Willkommen bei Modellbahnbau Reinhardt. Auf den nächsten Seiten wird Ihnen mit hilfreichen Bildern erklärt, wie Sie den Internet-Bestellschein ausfüllen und

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

B: bei mir war es ja die X, die hat schon lange probiert mich dahin zu kriegen, aber es hat eine Weile gedauert.

B: bei mir war es ja die X, die hat schon lange probiert mich dahin zu kriegen, aber es hat eine Weile gedauert. A: Ja, guten Tag und vielen Dank, dass du dich bereit erklärt hast, das Interview mit mir zu machen. Es geht darum, dass viele schwerhörige Menschen die Tendenz haben sich zurück zu ziehen und es für uns

Mehr

Rohstoffanalyse - COT Daten - Gold, Fleischmärkte, Orangensaft, Crude Oil, US Zinsen, S&P500 - KW 07/2009

Rohstoffanalyse - COT Daten - Gold, Fleischmärkte, Orangensaft, Crude Oil, US Zinsen, S&P500 - KW 07/2009 MikeC.Kock Rohstoffanalyse - COT Daten - Gold, Fleischmärkte, Orangensaft, Crude Oil, US Zinsen, S&P500 - KW 07/2009 Zwei Märkte stehen seit Wochen im Mittelpunkt aller Marktteilnehmer? Gold und Crude

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

Nina. bei der Hörgeräte-Akustikerin. Musterexemplar

Nina. bei der Hörgeräte-Akustikerin. Musterexemplar Nina bei der Hörgeräte-Akustikerin Nina bei der Hörgeräte-Akustikerin Herausgeber: uphoff pr-consulting Alfred-Wegener-Str. 6 35039 Marburg Tel.: 0 64 21 / 4 07 95-0 [email protected] www.uphoff-pr.de

Mehr

Wir arbeiten mit Zufallszahlen

Wir arbeiten mit Zufallszahlen Abb. 1: Bei Kartenspielen müssen zu Beginn die Karten zufällig ausgeteilt werden. Wir arbeiten mit Zufallszahlen Jedesmal wenn ein neues Patience-Spiel gestartet wird, muss das Computerprogramm die Karten

Mehr

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst. 40-Tage-Wunder- Kurs Umarme, was Du nicht ändern kannst. Das sagt Wikipedia: Als Wunder (griechisch thauma) gilt umgangssprachlich ein Ereignis, dessen Zustandekommen man sich nicht erklären kann, so dass

Mehr

Die Post hat eine Umfrage gemacht

Die Post hat eine Umfrage gemacht Die Post hat eine Umfrage gemacht Bei der Umfrage ging es um das Thema: Inklusion Die Post hat Menschen mit Behinderung und Menschen ohne Behinderung gefragt: Wie zufrieden sie in dieser Gesellschaft sind.

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Der professionelle Gesprächsaufbau

Der professionelle Gesprächsaufbau 2 Der professionelle Gesprächsaufbau Nach einer unruhigen Nacht wird Kimba am nächsten Morgen durch das Klingeln seines Handys geweckt. Noch müde blinzelnd erkennt er, dass sein Freund Lono anruft. Da

Mehr

Warum Sie jetzt kein Onlinemarketing brauchen! Ab wann ist Onlinemarketing. So finden Sie heraus, wann Ihre Website bereit ist optimiert zu werden

Warum Sie jetzt kein Onlinemarketing brauchen! Ab wann ist Onlinemarketing. So finden Sie heraus, wann Ihre Website bereit ist optimiert zu werden CoachingBrief 02/2016 Warum Sie jetzt kein Onlinemarketing brauchen! Eine Frage gleich zu Anfang: Wie viele Mails haben Sie in dieser Woche erhalten, in denen behauptet wurde: Inhalt Ihre Webseite sei

Mehr

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock infach Ihr Weg zum finanzellen Erfolg Geld Florian Mock FBV Die Grundlagen für finanziellen Erfolg Denn Sie müssten anschließend wieder vom Gehaltskonto Rückzahlungen in Höhe der Entnahmen vornehmen, um

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Objektorientierte Programmierung mit C++ Vector und List

Objektorientierte Programmierung mit C++ Vector und List Vector und List Ziel, Inhalt Wir lernen die Klassen vector und list aus der Standard-C++ Library kennen und anwenden. In einer Übung wenden wir diese Klassen an um einen Medienshop (CD s und Bücher) zu

Mehr

Informationsblatt Induktionsbeweis

Informationsblatt Induktionsbeweis Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln

Mehr

20. Algorithmus der Woche Online-Algorithmen: Was ist es wert, die Zukunft zu kennen? Das Ski-Problem

20. Algorithmus der Woche Online-Algorithmen: Was ist es wert, die Zukunft zu kennen? Das Ski-Problem 20. Algorithmus der Woche Online-Algorithmen: Was ist es wert, die Zukunft zu kennen? Das Ski-Problem Autor Susanne Albers, Universität Freiburg Swen Schmelzer, Universität Freiburg In diesem Jahr möchte

Mehr

Projektmanagement in der Spieleentwicklung

Projektmanagement in der Spieleentwicklung Projektmanagement in der Spieleentwicklung Inhalt 1. Warum brauche ich ein Projekt-Management? 2. Die Charaktere des Projektmanagement - Mastermind - Producer - Projektleiter 3. Schnittstellen definieren

Mehr

Kreativ visualisieren

Kreativ visualisieren Kreativ visualisieren Haben Sie schon einmal etwas von sogenannten»sich selbst erfüllenden Prophezeiungen«gehört? Damit ist gemeint, dass ein Ereignis mit hoher Wahrscheinlichkeit eintritt, wenn wir uns

Mehr

Schnellstart - Checkliste

Schnellstart - Checkliste Schnellstart - Checkliste http://www.ollis-tipps.de/schnellstart-in-7-schritten/ Copyright Olaf Ebers / http://www.ollis-tipps.de/ - Alle Rechte vorbehalten - weltweit Seite 1 von 6 Einleitung Mein Name

Mehr

ALEMÃO. Text 1. Lernen, lernen, lernen

ALEMÃO. Text 1. Lernen, lernen, lernen ALEMÃO Text 1 Lernen, lernen, lernen Der Mai ist für viele deutsche Jugendliche keine schöne Zeit. Denn dann müssen sie in vielen Bundesländern die Abiturprüfungen schreiben. Das heiβt: lernen, lernen,

Mehr

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage Inhaltsverzeichnis 1. Anmeldung... 2 1.1 Startbildschirm... 3 2. Die PDF-Dateien hochladen... 4 2.1 Neue PDF-Datei erstellen... 5 3. Obelix-Datei

Mehr

Evangelisieren warum eigentlich?

Evangelisieren warum eigentlich? Predigtreihe zum Jahresthema 1/12 Evangelisieren warum eigentlich? Ich evangelisiere aus Überzeugung Gründe, warum wir nicht evangelisieren - Festes Bild von Evangelisation - Negative Erfahrungen von und

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken. In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access Die Grundlagen der Datenbanken kurspc15 Inhaltsverzeichnis Access... Fehler! Textmarke nicht

Mehr

Software Engineering Interaktionsdiagramme

Software Engineering Interaktionsdiagramme Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)

Mehr

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software Wie erzeugt man ein Fotobuch im Internet bei Schlecker Seite Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software Punkt 12 bis 24: -Wir arbeiten mit der Software 8-16 -Erstellung

Mehr

1. Standortbestimmung

1. Standortbestimmung 1. Standortbestimmung Wer ein Ziel erreichen will, muss dieses kennen. Dazu kommen wir noch. Er muss aber auch wissen, wo er sich befindet, wie weit er schon ist und welche Strecke bereits hinter ihm liegt.

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Sufi-Zentrum Rabbaniyya. Eusubillahi-mineş-şeytanirrajim Bismillahirr-rahmanirrahim. Angst und Drohung. Sheikh Eşref Efendi - Sufiland

Sufi-Zentrum Rabbaniyya. Eusubillahi-mineş-şeytanirrajim Bismillahirr-rahmanirrahim. Angst und Drohung. Sheikh Eşref Efendi - Sufiland Eusubillahi-mineş-şeytanirrajim Bismillahirr-rahmanirrahim Angst und Drohung Sheikh Eşref Efendi - Sufiland Urgroßsheikh Abd Allah Faiz ad Daghistani Was hast du gemacht, eben mit deinem Kind? Du hast

Mehr

Mehr Geld verdienen! Lesen Sie... Peter von Karst. Ihre Leseprobe. der schlüssel zum leben. So gehen Sie konkret vor!

Mehr Geld verdienen! Lesen Sie... Peter von Karst. Ihre Leseprobe. der schlüssel zum leben. So gehen Sie konkret vor! Peter von Karst Mehr Geld verdienen! So gehen Sie konkret vor! Ihre Leseprobe Lesen Sie...... wie Sie mit wenigen, aber effektiven Schritten Ihre gesteckten Ziele erreichen.... wie Sie die richtigen Entscheidungen

Mehr

Aufgabe: Knapp bei Kasse

Aufgabe: Knapp bei Kasse Bitte tragen Sie das heutige Datum ein: Anna und Beate unterhalten sich: Anna: Ich habe monatlich 250 Euro Taschengeld. Damit komme ich einfach nicht aus. Wieso das? 250 Euro sind doch viel Geld. Mein

Mehr

Die Invaliden-Versicherung ändert sich

Die Invaliden-Versicherung ändert sich Die Invaliden-Versicherung ändert sich 1 Erklärung Die Invaliden-Versicherung ist für invalide Personen. Invalid bedeutet: Eine Person kann einige Sachen nicht machen. Wegen einer Krankheit. Wegen einem

Mehr

präsentiert: Ventildeckel lackieren www.e30forum.de

präsentiert: Ventildeckel lackieren www.e30forum.de präsentiert: Ventildeckel lackieren www.e30forum.de DIY/FAQ: --===> Ventildeckel lackieren

Mehr

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003 Nicht kopieren Der neue Report von: Stefan Ploberger 1. Ausgabe 2003 Herausgeber: Verlag Ploberger & Partner 2003 by: Stefan Ploberger Verlag Ploberger & Partner, Postfach 11 46, D-82065 Baierbrunn Tel.

Mehr

Summenbildung in Bauteiltabellen mit If Then Abfrage

Summenbildung in Bauteiltabellen mit If Then Abfrage Summenbildung in Bauteiltabellen mit If Then Abfrage Die in Bauteiltabellen ausgelesenen Werte lassen sich in jeder Spalte als Summe berechnen. So können selbstverständlich die Flächen der in der Tabelle

Mehr

2015-06-11 Tagesprogramm

2015-06-11 Tagesprogramm 1 2015-06-11 Tagesprogramm Design-by-Contract 2 Vertragspartner Anbieter (Server) bietet Leistungen (Services) an Kunde (Client) nimmt von Anbietern angebotene Leistungen in Anspruch Details der Inanspruchnahme

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer Allgemein: Das RSA-Verschlüsselungsverfahren ist ein häufig benutztes Verschlüsselungsverfahren, weil es sehr sicher ist. Es gehört zu der Klasse der

Mehr

Eigene E-Mail gestalten Internet-E-Mail. In meinem heutigen Beitrag möchte ich mich speziell mit Outlook 2007 befassen.

Eigene E-Mail gestalten Internet-E-Mail. In meinem heutigen Beitrag möchte ich mich speziell mit Outlook 2007 befassen. Eigene E-Mail gestalten Internet-E-Mail Das Aussehen einer E-Mail bekommt immer mehr einen größeren Stellenwert. Wie es für eine Behauptung zehn unterschiedliche Meinungen gibt, so ist es auch im Design

Mehr

Ich möchte eine Bildergalerie ins Internet stellen

Ich möchte eine Bildergalerie ins Internet stellen Ich möchte eine Bildergalerie ins Internet stellen Ich habe viele Fotos von Blumen, von Häusern, von Menschen. Ich möchte zu einem Thema Fotos sammeln, eine Vorschau erstellen und die Fotos so in der Größe

Mehr

DAVID: und David vom Deutschlandlabor. Wir beantworten Fragen zu Deutschland und den Deutschen.

DAVID: und David vom Deutschlandlabor. Wir beantworten Fragen zu Deutschland und den Deutschen. Das Deutschlandlabor Folge 09: Auto Manuskript Die Deutschen sind bekannt dafür, dass sie ihre Autos lieben. Doch wie sehr lieben sie ihre Autos wirklich, und hat wirklich jeder in Deutschland ein eigenes

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion

Mehr

Bilder zum Upload verkleinern

Bilder zum Upload verkleinern Seite 1 von 9 Bilder zum Upload verkleinern Teil 1: Maße der Bilder verändern Um Bilder in ihren Abmessungen zu verkleinern benutze ich die Freeware Irfan View. Die Software biete zwar noch einiges mehr

Mehr

Heute schon den Traumjob von morgen finden Mit professioneller Berufsberatung zur passenden Ausbildung

Heute schon den Traumjob von morgen finden Mit professioneller Berufsberatung zur passenden Ausbildung Beitrag: 1:51 Minuten Anmoderationsvorschlag: Im Herbst beginnt das Ausbildungsjahr. Wer aber seine Traumstelle haben möchte, sollte sich frühzeitig kümmern, denn bis dahin ist es ein weiter Weg: Welcher

Mehr

Dow Jones am 13.06.08 im 1-min Chat

Dow Jones am 13.06.08 im 1-min Chat Dow Jones am 13.06.08 im 1-min Chat Dieser Ausschnitt ist eine Formation: Wechselstäbe am unteren Bollinger Band mit Punkt d über dem 20-er GD nach 3 tieferen Hoch s. Wenn ich einen Ausbruch aus Wechselstäben

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22 Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014)

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014) Handbuch NAFI Online-Spezial 1. Auflage (Stand: 24.09.2014) Copyright 2016 by NAFI GmbH Unerlaubte Vervielfältigungen sind untersagt! Inhaltsangabe Einleitung... 3 Kundenauswahl... 3 Kunde hinzufügen...

Mehr

O du fröhliche... Weihnachtszeit: Wie Sarah und ihre Familie Weihnachten feiern, erfährst du in unserer Fotogeschichte.

O du fröhliche... Weihnachtszeit: Wie Sarah und ihre Familie Weihnachten feiern, erfährst du in unserer Fotogeschichte. Es ist der 24. Dezember. Heute ist Heiligabend. Nach dem Aufstehen schaut Sarah erst einmal im Adventskalender nach. Mal sehen, was es heute gibt. Natürlich einen Weihnachtsmann! O du fröhliche... Weihnachtszeit:

Mehr

Qualität und Verlässlichkeit Das verstehen die Deutschen unter Geschäftsmoral!

Qualität und Verlässlichkeit Das verstehen die Deutschen unter Geschäftsmoral! Beitrag: 1:43 Minuten Anmoderationsvorschlag: Unseriöse Internetanbieter, falsch deklarierte Lebensmittel oder die jüngsten ADAC-Skandale. Solche Fälle mit einer doch eher fragwürdigen Geschäftsmoral gibt

Mehr

Erstellen von x-y-diagrammen in OpenOffice.calc

Erstellen von x-y-diagrammen in OpenOffice.calc Erstellen von x-y-diagrammen in OpenOffice.calc In dieser kleinen Anleitung geht es nur darum, aus einer bestehenden Tabelle ein x-y-diagramm zu erzeugen. D.h. es müssen in der Tabelle mindestens zwei

Mehr

Online Newsletter III

Online Newsletter III Online Newsletter III Hallo zusammen! Aus aktuellem Anlass wurde ein neuer Newsletter fällig. Die wichtigste Neuerung betrifft unseren Webshop mit dem Namen ehbshop! Am Montag 17.10.11 wurde die Testphase

Mehr

Abwesenheitsnotiz im Exchange Server 2010

Abwesenheitsnotiz im Exchange Server 2010 Abwesenheitsnotiz im Exchange Server 2010 1.) Richten Sie die Abwesenheitsnotiz in Outlook 2010 ein und definieren Sie, an welche Absender diese gesendet werden soll. Klicken Sie dazu auf Datei -> Informationen

Mehr

Leit-Bild. Elbe-Werkstätten GmbH und. PIER Service & Consulting GmbH. Mit Menschen erfolgreich

Leit-Bild. Elbe-Werkstätten GmbH und. PIER Service & Consulting GmbH. Mit Menschen erfolgreich Leit-Bild Elbe-Werkstätten GmbH und PIER Service & Consulting GmbH Mit Menschen erfolgreich Vorwort zu dem Leit-Bild Was ist ein Leit-Bild? Ein Leit-Bild sind wichtige Regeln. Nach diesen Regeln arbeiten

Mehr

.NET Code schützen. Projekt.NET. Version 1.0

.NET Code schützen. Projekt.NET. Version 1.0 .NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Serienbrief aus Outlook heraus Schritt 1 Zuerst sollten Sie die Kontakte einblenden, damit Ihnen der Seriendruck zur Verfügung steht. Schritt 2 Danach wählen Sie bitte Gerhard Grünholz 1 Schritt 3 Es öffnet

Mehr