[C++] Zeiger auf 2D-Arrays

Im Zuge meiner Implementierung der Software für mein Matrixlicht hatte ich vor eine Routine zu schreiben, die es mir erlaubt von der ID des Musters, welches per DIP-Schalter ausgewählt werden kann, automatisiert auf das zugehörige 2D-Array zu schließen.

Nach einiger Recherche kam ich auf diesen Code:

int pattern0[X][Y] = {...};

/* N: Anzahl der Elemente im Pointer-Array */
int (*pattern_collection[N])[X] = {pattern0,...};

/* A: Index des Elements aus dem Pointer-Array */
int *p_selected_pattern = reinterpret_cast<int*>(*(pattern_collection + A) + X);

/* Prints pattern0[1][1] if Y is set to 0 and X to 0 */
std::cout << *(p_selected_pattern + Y) << std::endl;

EDIT: Es gab einige Fehler im Code, diese wurden berichtigt.

Werbeanzeigen

Integralrechnung: Linearität Teil 1b

Im letzten Mathematik-Artikel habe ich geschrieben, dass man anhand eines praktischen Beispiels sehen kann, dass die Regel \int \! (f(x) + g(x)) \, \mathrm{d}x = \int \! f(x) \, \mathrm{d}x + \int \! g(x) \, \mathrm{d}x gilt.

Dies möchte ich etwas verallgemeinern und anhand der Funktionen f(x) = a_1 \cdot x + b_1 und g(x) = a_2 \cdot x + b_2 zeigen. Dies ist kein Beweis! Diese Rechnung soll nur die Zusammenhänge (bei Polynomen 1. Grades zeigen).

\int \! ((a_1 \cdot x + b_1) +(a_2 \cdot x + b_2)) \, \mathrm{d}x = \int \! (a_1 \cdot x + b_1) \, \mathrm{d}x + \int \! (a_2 \cdot x + b_2) \, \mathrm{d}x

\Leftrightarrow \int \! (a_1 \cdot x + a_2 \cdot x + b_1 + b_2) \, \mathrm{d}x = \int \! (a_1 \cdot x + b_1) \, \mathrm{d}x + \int \! (a_2 \cdot x + b_2) \, \mathrm{d}x

\Leftrightarrow \int \! (x \cdot (a_1 + a_2)+ b_1 + b_2) \, \mathrm{d}x = \int \! (a_1 \cdot x + b_1) \, \mathrm{d}x + \int \! (a_2 \cdot x + b_2) \, \mathrm{d}x

\Leftrightarrow (\frac{1}{2}x^2 \cdot (a_1 + a_2)+ b_1 \cdot x + b_2 \cdot x) + c_3 = (\frac{1}{2} \cdot a_1 \cdot x^2 + b_1 \cdot x + c_1) + (\frac{1}{2} \cdot a_2 \cdot x^2 + b_2 \cdot x + c_2)

\Leftrightarrow \frac{1}{2} \cdot (a_1 + a_2) \cdot x^2 + (b_1+ b_2) \cdot x  + c_3 = (\frac{1}{2} \cdot a_1 \cdot x^2 + \frac{1}{2} \cdot a_2 \cdot x^2  + b_1 \cdot x + b_2 \cdot x +  c_1 + c_2)

\Leftrightarrow \frac{1}{2} \cdot (a_1 + a_2) \cdot x^2 + (b_1+ b_2) \cdot x  + c_3 = \frac{1}{2} \cdot (a_1 + a_2) \cdot x^2 + (b_1 + b_2) \cdot x +  c_1 + c_2

\Rightarrow c_3 = c_1 + c_2

Ich hoffe, ich konnte diesen Zusammenhang noch ein wenig stärker verdeutlichen. Der Zusammenhang c_3 = c_1 + c_2 gilt für alle Integrale, da sich die Funktionsterme der Stammfunktion restlos auslöschen (Durch Subtraktion der Stammfunktionen ohne c_n). Es bleiben lediglich die Integrationskonstanten übrig.

C++11 with eclipse-cdt

Das war der ausschlaggebende Artikel, der mir half C++ 11 mit Eclipse Neon zu programmieren.

diGital eFFects

Many modern programming language has cool language features like lambdas and automatic memory management. You can also use some of these modern and cool features in C++11. But writing C++11 in eclipse is not straight forward, as you need to configure for it. I will explain the configuration requirement for eclipse-cdt so that you can writing C++11 code in it.

  • I will be using eclipse neon for this demonstration but it should work with other version of cdt as long as the compiler has C++11 support for it.
  • I will only consider GNU-C++ compiler but it should work with other compilers (give it has support and you know the flags)
  • I am using linux (ubuntu) as platform. So, to use threading, I need pthread library. You may or may not need it based on your platform.

Let us first consider a simple C++11 code in eclipse.

Fire up your eclipse…

Ursprünglichen Post anzeigen 415 weitere Wörter