Skip to content
Snippets Groups Projects
Commit dcfdb962 authored by Björn Fischer's avatar Björn Fischer :new_moon_with_face:
Browse files

update text for 153FunktionenInC

parent 98d14c01
Branches
No related tags found
No related merge requests found
<div>
<p>Diese Aufgabe ist ein Beispiel für Aufgaben in der Programmiersprache C.</p>
<h3>Quelltextdateien</h3>
<p>Als Dateiendung für C Quelltexte ist die Endung <tt>.c</tt> zu verwenden.</p>
<p>Header Dateien können beliebig hinzugefügt werden.</p>
<div><div>
<p>Gegeben sei folgende C Header-Datei <code>beispiele.h</code>:</p>
<pre class="language-cpp">#ifndef BEISPIELE_H
#define BEISPIELE_H
<h3>Testframework</h3>
<p>Es wird ein minimales eigenes CUnit-Framework verwendet.</p>
#include "MemoryTest.h"
#include <stdbool.h>
<h3>Testdateien</h3>
<ul>
<li>
<p>Für direkt ausgwertete Tests ist eine Datei nach dem Namensschema: <tt>*_test.cc</tt> zu erstellen. Es darf nur eine solche Datei geben.</p>
<p>In dieser Datei ist das Framework zu inkludieren: <tt><![CDATA[#include "CUnit.h"]]></tt></p>
<p>Diese Datei hat eine <tt>main</tt>-Funktion. In dieser ist das CUnit-Framework zu öffen und zu beenden:</p>
<pre>int main(int argc, char** args){
printHeader();
unsigned long int factorial(unsigned int x);
/* hier jetzt die Testfälle */
int mystery(int x, int z);
printResults();
printStorage();
unsigned int ggt(unsigned int a, unsigned int b);
printFoot();
return 0;
}</pre>
</li>
<li>
<p>Für Abnahmetests ist eine Datei nach dem Namensscheme: <tt>*_test_approval.cc</tt> zu erstellen. Es darf nur eine solche Datei geben.</p>
<p>Ansonsten gilt für Abnahmetests dasselbe wie für die direkten Tests.</p>
</li>
</ul>
void eratosthenes(bool* array, unsigned int length);
<h3>Testfälle</h3>
<p>Ein Testfall hat einen Namen wird mit <tt>testStart("test_name");</tt> eröffnet.</p>
<p>Dann können die Assertions kommen. Es gibt nur zwi Arten von Assertion:
void matrixMult(double** a,double** b,double** c,unsigned int n);
#endif
</pre>
<p>Implementieren Sie die einzelnen Funktionen in C.</p>
<p>Die C-Datei soll dabei <code>beispiele.c</code> heißen.</p>
<p>Die Funktionen im einzelnen:</p>
<ul>
<li><tt>assertIntEq(char* message,int expected, int actual);</tt></li>
<li><tt>assertTrue(char* message,bool value);</tt></li>
<li>Schreiben Sie die Fakultät. Sie brauchen sich nicht von den für Javaprogrammierer etwas ungewohnten Typen <code>unsigned long int</code> und <code>unsigned int</code> verwirren zu lassen.</li>
<li>Schreiben Sie die mystery-Funktion mit folgender Spezifikation:<br/>$mystery(0, z) = 0$<br/>$mystery(x, z) = mystery(-x, -z)$ für $x&lt;0$<br/>$mystery(x, z) = mystery(x-1, z) + z$</li>
<li>Verwenden sie für ggt den Euklid Algorithmus zur Berechnung des größten gemeinsamen Teilers.</li>
<li><code>void eratosthenes(bool* array, unsigned int length)</code>;<br/>Gegeben sei ein Array von Wahrheitswerten (in C notiert als <code>bool*</code> statt wie in Java als <code>boolean[]</code>, aber Sie können den gleichen Zugriff per Index auf ein Array Element machen wie in Java per <code>array[i]</code>). Zusätzlich gegeben ist die Länge des Arrays im Parameter <code>length</code> (anders als in Java können Sie in C einen Array nicht nach seiner Länge fragen.) Implementieren Sie nun mit dem Sieb des Erathostenes die Funktion, so dass anschließend gilt: wenn <code>array[i]</code> true ist, dann gilt, dass i+2 eine Primzahl ist.</li>
<li><code>void matrixMult(double** a,double** b,double** c, unsigned int length)</code>
<p>Realisieren Sie die Matrix-Multiplikation. Eine Matrix ist ein zweidimensionaler Array. Der erste Index gibt die Zeile, der zweite Index gibt die Spalte an. Nach Ausführung der Funktion, soll in der Matrix <code>c</code> das Ergebnis aus der Multiplikation von <code>a</code> und <code>b</code> stehen. Die Anzahl der Zeilen und Spalten wird durch den Parameter <code>length</code> angegeben.</p>
</li>
</ul>
<p>Beendet wird ein Testfall mit: <tt>testEnd();</tt></p>
<h3>Bibliotheken</h3>
<p>Zusätzliche Bibliotheken sind in der Testumgebeung bisher nicht installiert. Lediglich math wird vom Linker berücksichtigt <tt>-m</tt>.
</p>
<h3>Achtung!</h3>
<p>Wenn das Programm crashed gibt es keine Möglichkeit irgendeinen Test auszuwerten.</p>
</div>
</div></div>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment