Artikel aus dem Jahr 2019

Programmier-Aufgaben in C: Anwendungen von Feldern, Zeigern und Funktionen

Programmieraufgaben zur Anwendung von Feldern und Zeigern, die im Sinne der strukturierten Programmierung zu lösen sind. Die Quelltexte sollen in reinem C geschrieben werden, also keine Konzepte verwenden, die nur in C++ verfügbar sind.

Diskrete Mathematik: Eine Entdeckungsreise (Springer-Lehrbuch)

Was zeichnet das Buch aus? Die Entdeckungsreise von Matoušek und Nešetřil will so gar nicht in die üblichen Kategorien von Mathematik-Büchern passen: Es gibt Lehrbücher, die streng nach dem Prinzip Definition – Satz – Beweis aufgebaut sind und die den Leser meist mit der Frage zurücklassen: "Wie soll ich jemals derartige Mathematik selber machen?" Und es gibt populärwissenschaftliche Bücher, die viel zu oberflächlich sind, um mit ihnen eigene mathematische Fähigkeiten entwickeln zu können. Warum ordnet sich die Entdeckungsreise hier nicht ein? Einerseits enthält es Definitionen, Sätze und Beweise und ein Blick in das Inhaltsverzeichnis erweckt den Eindruck eines üblichen Lehrbuches, andererseits findet man beim zufälligen Aufschlagen immer wieder Passagen im Plauderton . Dennoch ist es alles andere als eine Mischung der beiden genannten Kategorien. Um dies festzustellen, reicht es ein Kapitel zu lesen, von dem man glaubt, es schon gut zu kennen – selbst dort wird man...

Diskrete Mathematik: Eine Entdeckungsreise (Springer-Lehrbuch)

Anwendung von C-Zeigern: Der Zusammenhang zwischen Feldern und Zeigern

Felder werden durch Zeiger organisiert und es ist gerade ein Charakteristikum der Sprache C, dass dies nicht nur intern verwendet wird, sondern dass man diesen Mechanismus selbst nutzen kann. Für den Einsteiger ist dies meist mit Schwierigkeiten verbunden, da man oft nicht entscheiden kann, mit welchem Objekt man gerade arbeitet (Zeiger oder Variable eines fundamentalen Datentyps). Die meisten der mit Feldern verbundenen Schwierigkeiten wie etwa die Zeigerarithmetik, die Ausgabe und der Vergleich von Feldern werden erklärt. Wie man Felder an Funktionen übergibt oder als Rückgabewert zurückerhält, wird im nächsten Kapitel erläutert.

Felder (arrays) in C

In einem Feld werden mehrer Komponenten von gleichem Datentyp zu einem Objekt zusammengefasst. Die Anzahl der Komponenten muss bei der Deklaration angegeben werden und darf sich während der Laufzeit des Programmes nicht ändern. Der häufigste Fehler beim Umgang mit Feldern besteht im Zugriff auf Komponenten jenseits des deklarierten Bereichs, was zu unbestimmtem Verhalten des Programmes führen kann. Die unterschiedlichen Möglichkeiten zur Initialisierung eines Feldes werden vorgestellt. Felder können in beliebig vielen Dimensionen angelegt werden; besprochen werden hier nur eindimensionale Felder (Vektoren) und zweidimensionale Felder (Matrizen).

Definition und einfache Anwendungen von C-Zeigern

Zeiger sind Variable, deren Wert eine Adresse ist. Man kann sie mit der Adresse einer anderen Variable initialisieren. Da unterschiedliche Datentypen unterschiedlich großen Speicherplatz belegen, muss bei der Deklaration eines Zeigers angegeben werden, welchen Datentyp die Variable besitzt, auf deren Speicherplatz er verweist. Diese Eigenschaften von Zeigern und mit welchen Operatoren (Adressoperator, Indirektionsoperator) dies realisiert wird, wird hier ausführlich diskutiert. Als Anwendung wird gezeigt, wie man mit Zeigern Funktionen realisieren kann, die mehrere Rückgabewerte besitzen.

Entwicklung eines brute force Algorithmus für das Damenproblem

Das Damenproblem, also die Aufgabe möglichst wenige Damen auf einem Schachbrett so aufzustellen, dass das gesamte Schachbrett beherrscht wird, wird in ein Problem der Graphentheorie übersetzt. Zu dessen Lösung wird ein brute-force-Algorithmus entwickelt, der darauf beruht, dass man das Schachbrett mit einer Adjazenz-Matrix beschreibt und diese geeignet auswertet.

Die Familie der apply-Funktionen in R Teil 2: Die Verarbeitung mehrerer Listen mit mapply(), Map() und outer()

Die Funktion lapply() ersetzt eine Iteration über die Komponenten einer Liste, wobei auf jede Komponente eine Funktion FUN angewendet wird; die Rückgabewerte werden wieder zu einer Liste zusammengefasst. Entsprechend wird mit mapply() über mehrere Listen iteriert, wobei in jedem Schritt entsprechende Komponenten ausgewählt werden und darauf wird die Funktion FUN angewendet. Die Funktion Map() ist ein Wrapper für mapply(), der die wichtigsten Anwendungsfälle abdeckt. Die meisten Funktionen in R sind vektorisiert, können also nicht nur auf einen Eingabewert, sondern auf einen Vektor angewendet werden. Die Vektorisierung von Funktionen ist ein in R zentrales Konzept, das ein besseres Verständnis der Funktion mapply() liefert. Zuletzt wird die Funktion outer() mit einigen Anwendungen besprochen. Die Funktion outer() besitzt zwei Vektoren (oder Felder) als Eingabewert und baut daraus ein komplexeres Feld auf.

Die Familie der apply-Funktionen in R Teil 1: Verarbeitung von Listen mit lapply(), sapply(), vapply() und rapply()

In der Familie der apply-Funktionen gibt es mehrere Vertreter, mit den über die Elemente einer Liste iteriert werden kann, wobei auf jede Komponente eine Funktion f() angewendet wird. Besprochen werden lapply(), sapply(), vapply() und rapply(). Die Funktion lapply() ist dabei der grundlegende Vertreter, der die bei der Iteration entstehenden Rückgabewerte wieder zu einer Liste zusammensetzt. Dagegen versucht sapply() einen möglichst einfachen Rückgabewert zu erzeugen (Vektor oder Feld). Der Funktion vapply() kann eine Vorlage für den Rückgabewert übergeben werden, so dass man bessere Kontrolle für weitere Berechnungen hat. Mit rapply() können bestimmte Datentypen aus einer Liste selektiert werden und nur auf diese wird die Funktion f() angewendet; zudem wird die Anwendung von f() rekursiv an die Komponenten der Liste weitergereicht.

Die Funktion apply() in R: Iteration über die Zeilen oder Spalten einer Matrix

Die Funktion apply() erlaubt es, über die Zeilen beziehungsweise Spalten einer Matrix zu iterieren und dabei eine Funktion FUN auf die Zeilen oder Spalten anzuwenden. Dabei entstehen leichter verständliche Quelltexte als bei den gleichwertigen Schleifen. Die Arbeitsweise der Funktion apply() kann man in drei Phasen unterteilen: split, apply, combine (Aufspalten der Matrix, Anwenden der Funktion FUN auf die Teile, Zusammensetzen der einzelnen Rückgabewerte zum Rückgabewert von apply()). Diese drei Phasen werden ausführlich erklärt und damit die Diskussion weiterer mit apply() verwandter Funktionen vorbereitet.

Diagnose-Funktionen für Funktionen in R

Bisher wurden für alle Datentypen Diagnose-Funktionen vorgestellt, die über Form und Inhalt von Objekten Aufschluss geben. Für Funktionen gibt es ebenso eine Reihe von Diagnose-Funktionen, die zu weiteren Konzepten der objekt-orientierte und funktionale Programmierung führen oder spezielle Konzepte von R betreffen. Vorgestellt werden die wichtigsten Diagnose-Funktionen für Funktionen, wobei nicht alle weiterführenden Konzepte im Detail besprochen werden können.

Spezielle selbstdefinierte Funktionen in R

Erläutert wird die Syntax, mit der man spezielle Funktionen in R selbst definieren kann: Funktionen mit dem Argument dot-dot-dot ("..."), binäre Operatoren, Funktionen höherer Ordnung und Funktionale, anonyme Funktionen, Listen von Funktionen, replacement-Funktionen, Funktionen mit unsichtbarem Rückgabewert. Um erste Funktionen in R zu implementieren reichen die Kenntnisse aus den Kapiteln Eigenschaften von Funktionen in R und Selbstdefinierte Funktionen in R (UDF = User Defined Functions); möchte man R tatsächlich als funktionale Programmiersprache nutzen, sind die hier vermittelten Kenntnisse unerlässlich.

Selbstdefinierte Funktionen in R (UDF = User Defined Functions)

Die Programmiersprache R bietet eine unüberschaubare Vielzahl von Funktionen, die bereits in den Standard-Paketen enthalten sind. Dennoch ist es unerlässlich, selber Funktionen zu implementieren, um selbstgestellte Aufgaben übersichtlich abzuarbeiten. Vorgestellt werden zwar nicht alle, aber die wichtigsten Hilfsmittel und Techniken für selbstdefinierte Funktionen: Die Syntax der Definition einer Funktion, Besonderheiten des Rückgabewertes einer Funktion, die Prüfung der Eingabewerte einer Funktion, das Setzen von default-Werten für die Argumente einer Funktion und einiges über den Mechanismus, wie Funktions-Argumente übergeben werden (call by value).

JVMLS 2019: Updates zum Projekt Panama

Auf dem JVM Language Summit 2019 stellte Maurizio Cimadomore Neuigkeiten zum Projekt Panama vor. Panama ist eine Alternative zu JNI (Java Native Interface) für die Einbindung von "fremden" (nicht-Java) APIs.

Eigenschaften von Funktionen in R

Eine Funktion ruft einen Quelltext-Abschnitt auf, der durch Eingabewerte konfiguriert werden kann und der einen Rückgabewert berechnet. Allgemeine Eigenschaften und Besonderheiten über die Eingabewerte und den Rückgabewert einer Funktion werden besprochen. Dies soll auf das nächste Kapitel vorbereiten, in dem gezeigt wird, wie man Funktionen selbst definiert.

Wozu dient die "Sternchen"-Syntax für ngIf, ngFor oder ngSwitchCase Direktiven in Angular

Die Nutzung von strukturellen Direktiven wie *ngIf, *ngFor oder *ngSwitchCase in Angular ist ein zentrales Konzept für die Manipulation der DOM-Struktur. Diese Direktiven sind gekennzeichnet durch das Sternchen/Asterisk-Symbol als Präfix, was sie von regulären Attribut-Direktiven unterscheidet. Doch was genau macht diese Syntax so besonders und warum hat Angular sich für diese spezifische Form entschieden?

Die while-Schleife und die repeat-Schleife in R

Die while-Schleife und die repeat-Schleife sind etwas allgemeiner als die for-Schleife. Wenn man weiß, wie oft eine Schleife durchlaufen werden soll, ist die for-Schleife weniger fehleranfällig einzusetzen. Ist dagegen nur die Bedingung bekannt, unter die Schleife verlassen werden soll, muss man die while- oder repeat-Schleife einsetzen. Die while-Schleife realisiert die kopfgesteuerte Schleife, die repeat-Schleife besitzt keine Bedingungsprüfung. Wie bei der for-Schleife können die Schlüsselwörter break (vorzeitiges Verlassen der Schleife) und next (sofortiger Übergang zum nächsten Schleifen-Durchlauf) eingesetzt werden.

Android mit Kotlin - kurz & gut

Dieses kompakte Buch richtet sich an Java-Programmierer, die sich rasch die Grundlagen für die Entwicklung von nativen Android-Apps aneignen möchten. Es besteht aus drei Teilen: Grundlagen : Übersicht über das Betriebsystem Android sowie Entwicklung in Android-Studio und Grundlagen von Kotlin. Apps ...

Android mit Kotlin - kurz & gut

Die for-Schleife in R

Schleifen mit einer Zählvariable werden eingesetzt, wenn bekannt ist, wie oft ein gewisser Vorgang wiederholt werden muss (wobei die Anweisungen nicht exakt identisch sind, sondern meist vom Wert der Zählvariable abhängen). Die Syntax der for-Schleife sowie einige mit ihr verbundene Spitzfindigkeiten werden erklärt. Zusätzliche Kontrolle über den Ablauf einer Schleife erhält man durch break (vorzeitiges Verlassen der Schleife) und next (sofortiger Übergang zum nächsten Wert der Zählvariable).

Die Mehrfachalternative in R: die Funktion switch()

Die Mehrfachalternative lässt sich durch verschachtelte Alternativen realisieren, was aber oft zu umständlichen und fehleranfälligen Quelltexten führt. Übersichtlicher ist die Realisierung mit der Funktion switch(). Für sie gibt es in R zwei Versionen, die sich in der Bedingungsprüfung unterscheiden: entweder wird eine Zeichenkette ausgewertet (character-Version) oder das Ergebnis der Bedingungsprüfung wird in eine ganze Zahl verwandelt (integer-Version).

Bedingung und Alternative in R: if else und ifelse

Die Bedingungsprüfung mit if und die Alternative mit if else sind die wohl am häufigsten eingesetzten Kontrollstrukturen, durch die sich der Ablauf eines Programmes steuern lässt – sie sorgen dafür, dass gewisse Programm-Teile nur ausgeführt werden, wenn eine bestimmte Bedingung erfüllt ist. In R gibt es zusätzlich eine vektorisierte Variante der Alternative mit ifelse().

Dataframes in R: Anwendungen

Nach den grundlegenden Eigenschaften im Kapitel "Dataframes in R: der Datentyp data frame" werden jetzt Anwendungen von Dataframes gezeigt: der Zugriff auf ein Dataframe (auf Spalten, Zeilen, einzelne Elemente oder Teilmengen), Sortierung eines Dataframes, Daten-Aggregation, Umwandlung in eine Matrix sowie das Schreiben eines Dataframes in eine Datei und umgekehrt das Lesen von tabellarischen Daten aus einer Datei.

Dataframes in R: der Datentyp data frame

Der Datentyp Dataframe vereinigt viele Eigenschaften der Datentypen Matrix und Liste und ist in zahlreichen Anwendungen der geeignete Rahmen, um statistische Daten zu speichern und ihre Auswertung vorzubereiten. Der erste Teil über Dataframes zeigt, wie man sie erzeugen und ihre Eigenschaften abfragen kann (Diagnose-Funktionen). Im nächsten Kapitel werden Anwendungen von Dataframes gezeigt.

Der größte gemeinsame Teiler und der Euklidische Algorithmus

Ausgehend von der Frage, welcher Zusammenhang zwischen Multiplikationstabellen und Linearkombinationen in den ganzen Zahlen bestehen, werden der Euklidische Algorithmus und seine Erweiterung besprochen. Der Euklidische Algorithmus berechnet den größten gemeinsamen Teiler zweier Zahlen, der erweiterte Euklidische Algorithmus erlaubt es zusätzlich, den größten gemeinsamen Teiler von a und b als Linearkombination von a und b darzustellen. Die Analyse dieser Algorithmen liefert zahlreiche Einsichten in die Zusammenhänge zwischen Kongruenzen, Linearkombination in Z und den Eigenschaften des größten gemeinsamen Teilers zweier Zahlen. In den R-Skripten werden Implementierungen vorgestellt sowie Verbesserungen (Blankinship, Stein) des Euklidischen Algorithmus diskutiert.

Die Teilbarkeitsrelation als Ordnungsrelation

Die Eigenschaften der Teilbarkeitsrelation werden untersucht. Besonders ausführlich wird gezeigt, dass sie eine Ordnungsrelation ist, welche Eigenschaften Ordnungsrelationen haben und wie sich diese in einem Hasse-Diagramm darstellen lassen. In den R-Skripten wird gezeigt, wie man das Hasse-Diagramm für eine beliebige Ordnungsrelation erzeugt. Die Anwendungsbeispiele zeigen dann Zusammenhänge zwischen der Teilbarkeitsrelation, der Teilmengenrelation und der Primfaktorzerlegung.

Ganzzahl-Division: Kongruenzen und Restklassen als Beispiele für Äquivalenzrelationen und Äquivalenzklassen

Die Ganzzahl-Division (oder Division mit Rest) führt zu wichtigen Begriffsbildungen: Kongruenz, Restklassen und ihre Verallgemeinerungen Äquivalenzrelation und Äquivalenzklassen. Insbesondere kann mit einer Äquivalenzrelation eine Zerlegung der zugrundeliegenden Menge definiert werden.

Faktoren in R: der Datentyp factor

In der Statistik steht man oft vor der Aufgabe, eine Reihe von Messdaten zu klassifizieren (oder: gruppieren) und die gruppierten Daten weiter auszuwerten (etwa Häufigkeiten der Klassen feststellen, Mittelwertbildung innerhalb der Klassen). Man kann diese Operationen natürlich auf der Ebene von Vektoren durchführen, indem man geeignete Funktionen für Vektoren anwendet. In R gibt es den Datentyp factor, der die Klassifizierung vornimmt und zahlreiche Auswertungen deutlich vereinfacht. Vorgestellt werden hier zuerst die Begriffe aus der Statistik, die mit der Klassifizierung von Daten zusammenhängen; weiter wie Faktoren und geordnete Faktoren erzeugt werden sowie deren Eigenschaften. Im folgenden Kapitel werden dann Anwendungen mit Faktoren gezeigt.

Grundbegriffe der Wahrscheinlichkeitsrechnung: Die Axiome von Kolmogorov

Die fundamentalen Begriffe der Wahrscheinlichkeitsrechnung, nämlich Ereignisalgebra, Wahrscheinlichkeit, Wahrscheinlichkeitsraum und die Axiome von Kolmogorov, werden formuliert. Es werden einige einfache Anwendungen und Skripte für Simulationen von Zufallsexperimenten gezeigt.

Grundbegriffe der Wahrscheinlichkeitsrechnung: Zufallsexperiment und Wahrscheinlichkeit

Die grundlegenden Begriffe der Wahrscheinlichkeitsrechnung werden eingeführt: Zufallsexperiment, Ergebnismenge, Ereignis, Ereignisalgebra, Wahrscheinlichkeit und Wahrscheinlichkeitsraum. Ferner werden Computer-Experimente zum Vergleich der Wahrscheinlichkeit und der relativen Häufigkeit vorgestellt.

Grundbegriffe der Wahrscheinlichkeitsrechnung: Begriffsbildungen der Kombinatorik

Nachdem im letzten Kapitel Beispiele für einfache Abzählprobleme vorgestellt wurden, werden jetzt die Grundbegriffe der Kombinatorik, nämlich Variation, Permutation und Kombination eingeführt, systematisch untersucht und an weiteren einfachen Beispielen erläutert.

Grundbegriffe der Wahrscheinlichkeitsrechnung: einfache Abzählprobleme

An einfachen Abzählproblemen beim Würfeln wird gezeigt, wie man in der Kombinatorik systematisch vorgeht, um Abzählprobleme zu klassifizieren und allgemeine Formeln zur Berechnung der Anzahl der Realisierungen gewisser Ereignisse herzuleiten. In den R-Skripten werden Beispiele gezeigt, wie man solche Probleme auch ohne Kenntnisse aus der Kombinatorik mit roher Gewalt (brute force-Algorithmen) lösen kann.

Mathematik für Informatiker: Ausführlich erklärt mit vielen Programmbeispielen und Aufgaben

Was sind die besonderen Vorzüge des Buches? Die Vorteile als Mathematik -Buch seien kurz genannt: Die komplette Mathematik für ein Informatik-Studium ist enthalten: natürliche Zahlen, algebraische Strukturen, Zahlentheorie reelle und komplexe Zahlen Lineare Algebra Graphentheorie ...

Mathematik für Informatiker: Ausführlich erklärt mit vielen Programmbeispielen und Aufgaben

Stellenwertsysteme und Umrechnung zwischen den wichtigsten Zahlensystemen: Dezimalsystem, Hexadezimalsystem, Dualsystem

In Stellenwertsystemen bildet man Zahlen, indem man Ziffern je nach ihrer Position mit einer Potenz der Basis gewichtet. Vorgestellt wird die allgemeine Definition eines Stellenwertsystems und die wichtigsten Vertreter: Dezimalsystem, Hexadezimalsystem, Dualsystem und Oktalsystem. Mir R-Skripten wird die Umrechnung zwischen Zahlensystemen durch eine Rekursion realisiert.

Listen in R: der Datentyp list

Listen sind in R die grundlegende rekursive Struktur: anders als bei einem Vektor, bei dem alle Komponenten einen identischen Datentyp besitzen müssen, ist für die Komponenten einer Liste ein beliebiger Datentyp zulässig - sie können sogar selber wieder Listen sein. Vorgestellt werden Funktionen zum Erzeugen von Listen, der Zugriff auf die Komponenten einer Liste, Diagnose-Funktionen für Listen und das Attribut names.

Der Satz des Pythagoras und pythagoreische Zahlentripel

Der Satz des Pythagoras ist zunächst eine geometrische Aussage über die Seitenlängen eines rechtwinkligen Dreiecks. Da es aber einige Dreiecke mit ganzzahligen Seitenlängen gibt (pythagoreische Zahlentripel) führt er schnell zu Fragen der Zahlentheorie. Einige Beweise des Satzes werden vorgestellt und es werden die Bezeichnungen für die zahlentheoretischen Fragestellungen eingeführt (näher untersucht werden sie in den anschließenden Kapiteln).