Selected Programming Assignments – Ausgewählte Programmieraufgaben

Polynome

Gegenstand dieser Aufgabe sind Polynomfunktionen, kurz auch Polynome genannt. Formal ist ein Polynom als Summe von Vielfachen von Potenzen einer Variablen x definiert:

Pn(x) = anxn + an-1xn-1 + … + a2x2 + a1x + a0.

Entwickeln Sie eine Klasse Polynom, die – möglichst einfallsreich – die unterschiedlichen Konstrukte (Instanzvariablen, Konstruktoren, Methoden, inklusive getter- und setter-Methoden, Lambda-Funktionen, Operatoren usw.) zur Definition einer Klasse in „Modern C++” in Anspruch nimmt.

[Mehr]

Das Springerproblem

Das Springerproblem ist auf den Schweizer Mathematiker Leonhard Euler (1707 – 1783) zurückzuführen. Dieser stellte sich vor über 200 Jahren, genauer gesagt im Jahre 1758, die folgende Frage: „Gegeben sei ein leeres Schachbrett. Gibt es eine Zugfolge, mit der der Springer alle (schwarzen und weißen) Felder des Bretts genau einmal besucht?”.

Hmmm, eine gute Frage, wird sich der geneigte Leser jetzt sagen. Möglicherweise kann man sie innerhalb von wenigen Minuten selbst beantworten, schließlich ist ein Schachbrett mit seinen 8×8 Feldern nicht so wirklich groß. Stellt man nach einer ersten Phase euphorischen Suchens ernüchternd fest, dass das Problem doch nicht ganz so einfach zu lösen ist, kommt man vielleicht auf den revolutionären Gedanken, dem Problem mit Hilfe eines Softwareprogramms auf den Leib zu rücken. Dies ist natürlich möglich, wie wir in dieser Fallstudie am Beispiel von Modern C++ zeigen werden.

Neben der Implementierung einer Backtracking-Strategie betrachten wir auch Überlegungen, wie sich das Suchen von Zugfolgen parallelisieren lässt. Die Methode std::async und Objekte, die es „erst in der Zukunft” gibt (std::future<T>), kommen zum Einsatz.

[Mehr]

Partitionen einer natürlichen Zahl

In der Zahlentheorie oder in der Kombinatorik ist eine Partition einer natürlichen Zahl n eine Möglichkeit, n als Summe natürlicher Zahlen zu schreiben. Zwei Summen, die sich nur in der Reihenfolge ihrer Summanden unterscheiden, werden als dieselbe Partition aufgefasst. Zum Beispiel kann die natürliche Zahl 4 auf fünf verschiedene Arten aufgeteilt werden:

4
3 + 1
2 + 2
2 + 1 + 1
1 + 1 + 1 + 1 

Wir beschäftigen uns in dieser Fallstudie mit der Fragestellung, auf wie viele Arten sich eine natürliche Zahl als Summe von natürlichen Zahlen – auch Partition oder Zerlegung genannt – schreiben lässt und wie sich diese mit den Hilfsmitteln von Modern C++ berechnen lassen.

[Mehr]
Cpp_11  Core 

Die Potenzmenge

Unter der Potenzmenge P(S) versteht man die Menge aller möglichen Teilmengen von S. Mit Hilfe zweier Klassen PowerSet und PartialSet sowie einem recht einfachen Algorithmus zur Bestimmung der Potenzmenge betrachten wir diese in Modern C++.

[Mehr]
Cpp_11  Core 

About me

Selected Programming Assignments

„Willkommen auf meinem Blog!“ Mein Name ist Peter Loos. Seit über 30 Jahren bewege ich mich als Software-Entwickler, Trainer und Autor in der Welt von C/C++, Java und C#. Meine besondere Leidenschaft gilt jedoch den Programmiersprachen selbst. Vor einiger Zeit bin ich zu meinen Wurzeln zurückgekehrt und habe mich voll und ganz dem „Modern C++“ verschrieben. Was Sie hier erwartet Diese Website bietet eine vielseitige Auswahl an Fachartikeln, die das gesamte Spektrum von C++ abdecken – von Grundlagen für Einsteiger bis hin zu Expertenwissen für die aktuellen Standards wie C++20 und C++23. [Mehr]

Bücher

Objektorientiertes Programmieren in Visual C#, Microsoft Press Deutschland, 2006, ISBN 3-86645-406-6. „Dieses Buch bietet eine fundierte Einführung in die Technologien, die der Programmiersprache C# und dem .NET-Framework zugrunde liegen. Um ein tiefergehendes Verständnis zu ermöglichen, werden die Paradigmen des objektorientierten Programmierens und die gegenüber C++ neuartigen Features von C# wie Schnittstellen, Delegates, Events und Generics erläutert. Dabei werden Schlüsselkonzepte der .NET-Architektur auch auf Ebene der MSIL (Microsoft Intermediate Language) erklärt, um dem Leser einen Blick hinter die Kulissen der C#-Sprachoberfläche zu ermöglichen. [Mehr]

Datenschutzerklärung

Name und Kontaktdaten des für die Verarbeitung Verantwortlichen sowie des betrieblichen Datenschutzbeauftragten Diese Datenschutz-Information gilt für die Datenverarbeitung durch: Verantwortlicher: Peter Loos Winner Zeile 27 90482 Nürnberg Email: info@peterloos.de Telefon: +49 (0) 911 50 43 94 Der betriebliche Datenschutzbeauftragte dieser Website ist unter info@peterloos.de erreichbar. Erhebung und Speicherung personenbezogener Daten sowie Art und Zweck von deren Verwendung Beim Aufrufen (Besuch) meiner Website [www.peterloos.de] werden durch den auf Ihrem Endgerät zum Einsatz kommenden Browser automatisch Informationen an den Server meiner Website gesendet. [Mehr]

History

Februrar 2026 Glückliche Zahlen, Schildkröten und Hasen Januar 2026 „Faules” Kopieren: Eine Alternative? Januar 2024 Rechtwinklige Dreiecke und parallel_for Dezember 2023 Kettenrechnen Mai 2023 Variadisch + Generisch = Folding + Rekursion: Wie bitte? Februar 2023 Berechnung von Permutationen Das Problem der dinierenden Philosophen März 2022 Fakultäten, Binomialkoeffizienten und Herr Legendre Februar 2022 Umgekehrte polnische Notation (UPN) Januar 2022 Expression Templates / Lazy Evaluation Oktober 2021 Morse-Alphabet Das Haus des Nikolaus Mai 2021 Benutzerdefinierte Literale: Übersetzungszeit oder Laufzeit? [Mehr]

Impressum

Verantwortlicher gemäß § 6 MDStV / Inhaber: Peter Loos Winner Zeile 27 90482 Nürnberg Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehme ich keine Haftung für Aufbau und Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich. Ich kann für Schäden, die aus diesen Seiten entstehen, nicht haftbar gemacht werden. Nutzungsbedingungen: Die Inhalte der Internetseite wurden sorgfältig erarbeitet, gleichwohl können Fehler auftreten. Ich weise darauf hin, dass die Informationen auf der Internetseite allgemeiner Art sind, die nicht auf die besonderen Bedürfnisse im Einzelfall abgestimmt sind. [Mehr]

Training

C++ Schulungen Meine C++–Kenntnisse gebe ich gerne in maßgeschneiderten Trainings weiter. Prinzipiell sind folgende Standard–Schulungsmodule verfügbar: C/C++ Programmierung (Basiswissen) C++ Programmierung für Fortgeschrittene Modern C++ (Erweiterungen C++11 bis C++23) Design Patterns in C++ Umstieg klassisches C++ auf Modern C++ Im Regelfall klären wir in einem tel. Vorabgespräch, auf welchem Wissensstand Sie bzw. Ihre Mitarbeiter aufsetzen. Wir legen dann gemeinsam fest, wie ein maßgeschneidertes Training (Inhalte, Umfang) aussehen kann. [Mehr]