396 lines
24 KiB
HTML
396 lines
24 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
||
<meta content="metadata description" lang="en" name="description" xml:lang="en" />
|
||
<meta content="description des métadonnées" lang="fr" name="description" xml:lang="fr" />
|
||
<meta content="Sphinx, MyST" name="keywords" />
|
||
<meta content="en_US" property="og:locale" />
|
||
|
||
<title>05 - Arrays/Strings/TicTacToe — SNP Labs documentation</title>
|
||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
|
||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
|
||
<script src="../_static/jquery.js"></script>
|
||
<script src="../_static/underscore.js"></script>
|
||
<script src="../_static/doctools.js"></script>
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="next" title="06 - Personen Verwaltung – Linked List" href="../P06_Personen_Verwaltung_Linked_List/README.html" />
|
||
<link rel="prev" title="03 - Bit Operationen, Struct, Typedef" href="../P03_Bit_Operation_struct_typedef/README.html" />
|
||
|
||
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
|
||
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
||
|
||
</head><body>
|
||
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
|
||
|
||
<div class="body" role="main">
|
||
|
||
<section class="tex2jax_ignore mathjax_ignore" id="arrays-strings-tictactoe">
|
||
<h1>05 - Arrays/Strings/TicTacToe<a class="headerlink" href="#arrays-strings-tictactoe" title="Permalink to this headline">¶</a></h1>
|
||
<hr class="docutils" />
|
||
<section id="ubersicht">
|
||
<h2>1. Übersicht<a class="headerlink" href="#ubersicht" title="Permalink to this headline">¶</a></h2>
|
||
<p>In diesem Praktikum werden Sie in der ersten Aufgabe ein Programm zum Einlesen, Sortieren und Ausgeben von Strings von Grund auf entwickeln.</p>
|
||
<p>In der zweiten Aufgabe werden Sie einen Programmrahmen zu einem funktionierenden TicTacToe-Spiel erweitern. Sie implementieren hierbei die fehlenden Funktionen bis alle Tests erfolgreich durchlaufen. Die gewählte Vorgehensweise entspricht somit Test-Driven-Development (TDD). D.h. es existieren zuerst Tests, welche alle fehlschlagen. Schrittweise werden die Funktionen implementiert bis alle Tests erfolgreich durchlaufen. Wenn die Tests erfolgreich durchlaufen, wird auch das Programm funktionieren.</p>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="lernziele">
|
||
<h2>2. Lernziele<a class="headerlink" href="#lernziele" title="Permalink to this headline">¶</a></h2>
|
||
<p>In diesem Praktikum schreiben Sie selbst von Grund auf ein C-Programme, das mit Strings operiert. Ferner ergänzen Sie ein bestehendes und lernen dabei den Zugriff auf Arrays.</p>
|
||
<ul class="simple">
|
||
<li><p>Sie können mit Arrays von Strings umgehen.</p></li>
|
||
<li><p>Sie können String-Funktionen aus der Standard Library verwenden.</p></li>
|
||
<li><p>Sie können anhand einer Beschreibung im Code die fehlenden Funktionen die auf Arrays zugreifen implementieren.</p></li>
|
||
</ul>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="aufgabe-1-sortieren-von-strings">
|
||
<h2>3. Aufgabe 1: Sortieren von Strings<a class="headerlink" href="#aufgabe-1-sortieren-von-strings" title="Permalink to this headline">¶</a></h2>
|
||
<p>Schreiben Sie ein C-Programm, das bis zu 10 Wörter mit einer maximalen Länge von jeweils 20 char von der Tastatur einliest, diese in Grossbuchstaben umwandelt, in einem Array der Reihe nach ablegt und zum Schluss im Array alphabetisch sortiert und ausgibt. Wiederholt eingegebene Wörter sollen dabei ignoriert werden. Das Ende der Eingabe soll durch das Erreichen der zehn unterschiedlichen Wörter oder durch die Eingabe von „ZZZ“ erfolgen. Die Ausgabe der sortierten Wörter soll direkt nach Beendigung der Eingabe erfolgen.</p>
|
||
<p>Hinweise:</p>
|
||
<ul class="simple">
|
||
<li><p>Zur Speicherung der Wörter sollten Sie ein zweidimensionales Array verwenden.</p></li>
|
||
<li><p>Verwenden Sie die String-Funktionen der C Standard Library (include <string.h>), z.B. um Strings alphabetisch zu vergleichen.</p></li>
|
||
<li><p>Wenn Sie aus anderen Vorlesungen bereits einen effizienten Sortieralgorithmus kennen, können Sie diesen natürlich verwenden. Sonst erfinden Sie einfach einen eigenen.</p></li>
|
||
<li><p>Strukturieren Sie das Programm durch geeignete Funktionen.</p></li>
|
||
</ul>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="aufgabe-2-tictactoe">
|
||
<h2>4. Aufgabe 2: TicTacToe<a class="headerlink" href="#aufgabe-2-tictactoe" title="Permalink to this headline">¶</a></h2>
|
||
<p>Das zu ergänzende Programm tic-tac-toe hat folgende Funktionalität:</p>
|
||
<ol class="arabic simple">
|
||
<li><p>es stellt ein 3x3 TicTacToe Spielbrett auf dem Terminal dar</p></li>
|
||
<li><p>es liest von stdin eine Ziffer 0…9 ein, wobei 0 für Programm-Terminieren, die übrigen Ziffern für die Wahl eines Feldes stehen</p></li>
|
||
<li><p>der erste Spielzug wird von Spieler A geführt, danach wechselt das Programm zwischen den Spielern A und B</p></li>
|
||
<li><p>bei Gewinn oder bei vollem Brett ist das Spiel vorbei</p></li>
|
||
</ol>
|
||
<p>Erweitern Sie die vorgegebenen Code Gerüste, welche im git Repository snp-lab-code verfügbar sind.</p>
|
||
<p>Wenn die Aufgabe erfolgreich umgesetzt ist, können Sie das Spiel ausführen:</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>bin/tic-tac-toe
|
||
</pre></div>
|
||
</div>
|
||
<p><img alt="" src="../_images/TicTacToe.png" /></p>
|
||
<p>Als Abnahme müssen die Tests unverändert ohne Fehler ausgeführt werden (<code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code>).</p>
|
||
<p>Die Architektur des Programms folgt dem MVC – Model-View-Control Paradigma. Dieses Paradigma besagt, dass die View (Eingabe und Darstellung) über Control (Vermittler) das Modell (die eigentliche Programm-Logik) steuert und darstellt. Dabei sind folgende Abhängigkeiten gegeben:</p>
|
||
<p><img alt="" src="../_images/MVC_pattern.png" /></p>
|
||
<hr class="docutils" />
|
||
<section id="teilaufgabe-test-model-init">
|
||
<h3>4.1 Teilaufgabe test_model_init<a class="headerlink" href="#teilaufgabe-test-model-init" title="Permalink to this headline">¶</a></h3>
|
||
<p>Das Programm besteht aus folgenden Files:</p>
|
||
<table class="colwidths-auto docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="text-left head"><p>Datei</p></th>
|
||
<th class="text-left head"><p>ToDo</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td class="text-left"><p>Makefile</p></td>
|
||
<td class="text-left"><p>-> gegeben, d.h. nichts anzupassen</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td class="text-left"><p>tests/tests.c</p></td>
|
||
<td class="text-left"><p>-> gegeben, d.h. nichts anzupassen</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td class="text-left"><p>src/main.c</p></td>
|
||
<td class="text-left"><p>-> gegeben, d.h. nichts anzupassen</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td class="text-left"><p>src/view.h</p></td>
|
||
<td class="text-left"><p>-> gegeben, d.h. nichts anzupassen</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td class="text-left"><p>src/view.c</p></td>
|
||
<td class="text-left"><p>-> gegeben, d.h. nichts anzupassen</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td class="text-left"><p>src/control.h</p></td>
|
||
<td class="text-left"><p>-> gegeben, d.h. nichts anzupassen</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td class="text-left"><p>src/control.c</p></td>
|
||
<td class="text-left"><p>-> gegeben, d.h. nichts anzupassen</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td class="text-left"><p>src/model.h</p></td>
|
||
<td class="text-left"><p>-> gegeben, d.h. nichts anzupassen</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td class="text-left"><p>src/model.c</p></td>
|
||
<td class="text-left"><p>-> <strong>anzupassen:</strong> umsetzen gemäss den Angaben unten</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<ol class="arabic simple">
|
||
<li><p>Führen Sie <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code> aus</p></li>
|
||
</ol>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>Suite: lab <span class="nb">test</span>
|
||
Test: test_model_init ...
|
||
init_model:... <span class="m">0</span>/0 FAILED
|
||
<span class="m">1</span>. tests/tests.c:62 - CU_ASSERT_EQUAL_FATAL<span class="o">(</span>instance->board<span class="o">[</span>row<span class="o">][</span>col<span class="o">]</span>,model_state_none<span class="o">)</span>
|
||
Test: test_model_get_state ...FAILED
|
||
<span class="m">1</span>. tests/tests.c:62 - CU_ASSERT_EQUAL_FATAL<span class="o">(</span>instance->board<span class="o">[</span>row<span class="o">][</span>col<span class="o">]</span>,model_state_none<span class="o">)</span>
|
||
Test: test_model_get_winner ...FAILED
|
||
<span class="m">1</span>. tests/tests.c:62 - CU_ASSERT_EQUAL_FATAL<span class="o">(</span>instance->board<span class="o">[</span>row<span class="o">][</span>col<span class="o">]</span>,model_state_none<span class="o">)</span>
|
||
Test: test_model_can_move ...FAILED
|
||
<span class="m">1</span>. tests/tests.c:62 - CU_ASSERT_EQUAL_FATAL<span class="o">(</span>instance->board<span class="o">[</span>row<span class="o">][</span>col<span class="o">]</span>,model_state_none<span class="o">)</span>
|
||
Test: test_model_move ...FAILED
|
||
<span class="m">1</span>. tests/tests.c:62 - CU_ASSERT_EQUAL_FATAL<span class="o">(</span>instance->board<span class="o">[</span>row<span class="o">][</span>col<span class="o">]</span>,model_state_none<span class="o">)</span>
|
||
Test: test_model_get_win_line ...FAILED
|
||
<span class="m">1</span>. tests/tests.c:62 - CU_ASSERT_EQUAL_FATAL<span class="o">(</span>instance->board<span class="o">[</span>row<span class="o">][</span>col<span class="o">]</span>,model_state_none<span class="o">)</span>
|
||
|
||
Run Summary: Type Total Ran Passed Failed Inactive
|
||
suites <span class="m">1</span> <span class="m">1</span> n/a <span class="m">0</span> <span class="m">0</span>
|
||
tests <span class="m">6</span> <span class="m">6</span> <span class="m">0</span> <span class="m">6</span> <span class="m">0</span>
|
||
asserts <span class="m">6</span> <span class="m">6</span> <span class="m">0</span> <span class="m">6</span> n/a
|
||
</pre></div>
|
||
</div>
|
||
<ol class="arabic simple" start="2">
|
||
<li><p>Konzentrieren Sie sich auf den ersten Test der fehlschlägt. Dies ist ein Unit Test, welcher die Funktion <strong>model_init()</strong> prüft. Suchen Sie die Funktion in <strong>src/model.h</strong> und <strong>src/model.c</strong>.</p></li>
|
||
<li><p>Was ist die geforderte Funktionalität und wie ist sie implementiert?</p></li>
|
||
</ol>
|
||
<p>Suchen Sie die darin aufgerufene <strong>model_init()</strong> Funktion und implementieren Sie diese.</p>
|
||
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">model_init</span><span class="p">(</span><span class="n">model_t</span><span class="w"> </span><span class="o">*</span><span class="n">instance</span><span class="p">)</span><span class="w"></span>
|
||
<span class="p">{</span><span class="w"></span>
|
||
<span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="n">instance</span><span class="p">);</span><span class="w"></span>
|
||
|
||
<span class="w"> </span><span class="c1">// Instructions to the students:</span>
|
||
<span class="w"> </span><span class="c1">// set all fields of the board to model_state_none</span>
|
||
<span class="w"> </span><span class="c1">// BEGIN-STUDENTS-TO-ADD-CODE</span>
|
||
|
||
|
||
|
||
<span class="w"> </span><span class="c1">// END-STUDENTS-TO-ADD-CODE</span>
|
||
<span class="p">}</span><span class="w"></span>
|
||
|
||
</pre></div>
|
||
</div>
|
||
<ol class="arabic simple" start="3">
|
||
<li><p>Führen Sie <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code> und korrigieren Sie obige Funktion, bis der Test nicht mehr fehlschlägt.</p></li>
|
||
</ol>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="teilaufgabe-test-model-get-state-und-test-model-get-winner">
|
||
<h3>4.2 Teilaufgabe test_model_get_state und test_model_get_winner<a class="headerlink" href="#teilaufgabe-test-model-get-state-und-test-model-get-winner" title="Permalink to this headline">¶</a></h3>
|
||
<p>Gehen Sie analog zur ersten Teilaufgabe vor:</p>
|
||
<ol class="arabic simple">
|
||
<li><p>Führen Sie <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code> aus.</p></li>
|
||
<li><p>Suchen Sie die Funktion <strong>model_get_state()</strong> in <strong>model.h</strong> und <strong>model.c</strong>.</p></li>
|
||
<li><p>Implementieren Sie die intern benutzte Funktion <strong>get_state()</strong> gemäss der Anleitung im Code.</p></li>
|
||
</ol>
|
||
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">model_state_t</span><span class="w"> </span><span class="nf">model_get_state</span><span class="p">(</span><span class="n">model_t</span><span class="w"> </span><span class="o">*</span><span class="n">instance</span><span class="p">,</span><span class="w"> </span><span class="n">model_pos_t</span><span class="w"> </span><span class="n">pos</span><span class="p">)</span><span class="w"></span>
|
||
<span class="p">{</span><span class="w"></span>
|
||
<span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="n">instance</span><span class="p">);</span><span class="w"></span>
|
||
<span class="w"> </span><span class="n">assert_pos</span><span class="p">(</span><span class="n">pos</span><span class="p">);</span><span class="w"></span>
|
||
|
||
<span class="w"> </span><span class="c1">// Instructions to the students:</span>
|
||
<span class="w"> </span><span class="c1">// replace the stub implementation my access to the field at the given position.</span>
|
||
<span class="w"> </span><span class="c1">// BEGIN-STUDENTS-TO-ADD-CODE</span>
|
||
|
||
|
||
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">model_state_none</span><span class="p">;</span><span class="w"> </span><span class="c1">// stub</span>
|
||
|
||
|
||
<span class="w"> </span><span class="c1">// END-STUDENTS-TO-ADD-CODE</span>
|
||
<span class="p">}</span><span class="w"></span>
|
||
|
||
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="teilaufgabe-test-model-can-move">
|
||
<h3>4.3 Teilaufgabe test_model_can_move<a class="headerlink" href="#teilaufgabe-test-model-can-move" title="Permalink to this headline">¶</a></h3>
|
||
<p>Gehen Sie analog den obigen Teilaufgaben vor und implementieren Sie, gemäss Vorgaben im Code, die Funktion <strong>model_can_move()</strong>.</p>
|
||
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">model_can_move</span><span class="p">(</span><span class="n">model_t</span><span class="w"> </span><span class="o">*</span><span class="n">instance</span><span class="p">)</span><span class="w"></span>
|
||
<span class="p">{</span><span class="w"></span>
|
||
<span class="w"> </span><span class="n">assert</span><span class="p">(</span><span class="n">instance</span><span class="p">);</span><span class="w"></span>
|
||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">model_get_winner</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">model_state_none</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
||
<span class="w"> </span><span class="c1">// Instructions to the students:</span>
|
||
<span class="w"> </span><span class="c1">// scan all fields: return 1 with first field which equals model_state_none</span>
|
||
<span class="w"> </span><span class="c1">// BEGIN-STUDENTS-TO-ADD-CODE</span>
|
||
|
||
|
||
|
||
<span class="w"> </span><span class="c1">// END-STUDENTS-TO-ADD-CODE</span>
|
||
<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
||
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span>
|
||
<span class="p">}</span><span class="w"></span>
|
||
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="teilaufgabe-test-model-move-und-test-model-get-win-line">
|
||
<h3>4.4 Teilaufgabe test_model_move und test_model_get_win_line<a class="headerlink" href="#teilaufgabe-test-model-move-und-test-model-get-win-line" title="Permalink to this headline">¶</a></h3>
|
||
<p>Schliesslich gehen Sie auch hier analog den obigen Teilaufgaben vor und implementieren Sie, gemäss Vorgaben im Code, die Funktion <strong>set_state()</strong>.</p>
|
||
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cm">/**</span>
|
||
<span class="cm"> * @brief Sets the field on the board to the given state.</span>
|
||
<span class="cm"> * @param instance [INOUT] The instance which holds the state.</span>
|
||
<span class="cm"> * @param pos [IN] The affected field.</span>
|
||
<span class="cm"> * @param state [IN] The new state of the field.</span>
|
||
<span class="cm"> */</span><span class="w"></span>
|
||
<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">set_state</span><span class="p">(</span><span class="n">model_t</span><span class="w"> </span><span class="o">*</span><span class="n">instance</span><span class="p">,</span><span class="w"> </span><span class="n">model_pos_t</span><span class="w"> </span><span class="n">pos</span><span class="p">,</span><span class="w"> </span><span class="n">model_state_t</span><span class="w"> </span><span class="n">state</span><span class="p">)</span><span class="w"></span>
|
||
<span class="p">{</span><span class="w"></span>
|
||
<span class="w"> </span><span class="n">assert_pos</span><span class="p">(</span><span class="n">pos</span><span class="p">);</span><span class="w"></span>
|
||
|
||
<span class="w"> </span><span class="c1">// Instructions to the students:</span>
|
||
<span class="w"> </span><span class="c1">// set the field of the board to the new state</span>
|
||
<span class="w"> </span><span class="c1">// BEGIN-STUDENTS-TO-ADD-CODE</span>
|
||
|
||
|
||
|
||
|
||
<span class="w"> </span><span class="c1">// END-STUDENTS-TO-ADD-CODE</span>
|
||
<span class="p">}</span><span class="w"></span>
|
||
|
||
</pre></div>
|
||
</div>
|
||
<p>Wenn die beiden obigen Teilaufgaben erfolgreich umgesetzt sind, laufen die Tests ohne Fehler durch und das Spiel kann gespielt werden.</p>
|
||
</section>
|
||
</section>
|
||
<hr class="docutils" />
|
||
<section id="bewertung">
|
||
<h2>5. Bewertung<a class="headerlink" href="#bewertung" title="Permalink to this headline">¶</a></h2>
|
||
<p>Der funktionierende Programmcode muss der Praktikumsbetreuung gezeigt werden. Die Lösungen müssen mündlich erklärt werden.</p>
|
||
<table class="colwidths-auto docutils align-default">
|
||
<thead>
|
||
<tr class="row-odd"><th class="text-left head"><p>Aufgabe</p></th>
|
||
<th class="text-left head"><p>Kriterium</p></th>
|
||
<th class="text-left head"><p>Punkte</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td class="text-left"><p>Sortieren von Strings</p></td>
|
||
<td class="text-left"><p>Sie können das funktionierende Programm demonstrieren und erklären.</p></td>
|
||
<td class="text-left"><p>2</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td class="text-left"><p>TicTacToe</p></td>
|
||
<td class="text-left"><p>Sie können das funktionierende Programm inklusive funktionierende Tests demonstrieren und erklären.</p></td>
|
||
<td class="text-left"><p></p></td>
|
||
</tr>
|
||
<tr class="row-even"><td class="text-left"><p>TicTacToe</p></td>
|
||
<td class="text-left"><p>Teilaufgabe test_model_init</p></td>
|
||
<td class="text-left"><p>0.5</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td class="text-left"><p>TicTacToe</p></td>
|
||
<td class="text-left"><p>Teilaufgabe test_model_get_state und test_model_get_winner</p></td>
|
||
<td class="text-left"><p>0.5</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td class="text-left"><p>TicTacToe</p></td>
|
||
<td class="text-left"><p>Teilaufgabe test_model_can_move</p></td>
|
||
<td class="text-left"><p>0.5</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td class="text-left"><p>TicTacToe</p></td>
|
||
<td class="text-left"><p>Teilaufgabe test_model_move und test_model_get_win_line</p></td>
|
||
<td class="text-left"><p>0.5</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<hr class="docutils" />
|
||
<p>Version: 14.02.2022</p>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||
<div class="sphinxsidebarwrapper">
|
||
<p class="logo">
|
||
<a href="../index.html">
|
||
<img class="logo" src="../_static/logo.png" alt="Logo"/>
|
||
|
||
<h1 class="logo logo-name">SNP Labs</h1>
|
||
|
||
</a>
|
||
</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<h3>Navigation</h3>
|
||
<ul class="current">
|
||
<li class="toctree-l1"><a class="reference internal" href="../P01_Erste_Schritte_mit_C/README.html">01 - Erste Schritte mit C</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../P02_Funktionen_Datentyp_enum/README.html">02: Funktionen, Datentyp “enum”</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../P03_Bit_Operation_struct_typedef/README.html">03 - Bit Operationen, Struct, Typedef</a></li>
|
||
<li class="toctree-l1 current"><a class="current reference internal" href="#">05 - Arrays/Strings/TicTacToe</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="#ubersicht">1. Übersicht</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#lernziele">2. Lernziele</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#aufgabe-1-sortieren-von-strings">3. Aufgabe 1: Sortieren von Strings</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#aufgabe-2-tictactoe">4. Aufgabe 2: TicTacToe</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="#teilaufgabe-test-model-init">4.1 Teilaufgabe test_model_init</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#teilaufgabe-test-model-get-state-und-test-model-get-winner">4.2 Teilaufgabe test_model_get_state und test_model_get_winner</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#teilaufgabe-test-model-can-move">4.3 Teilaufgabe test_model_can_move</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#teilaufgabe-test-model-move-und-test-model-get-win-line">4.4 Teilaufgabe test_model_move und test_model_get_win_line</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#bewertung">5. Bewertung</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../P06_Personen_Verwaltung_Linked_List/README.html">06 - Personen Verwaltung – Linked List</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../P07_Prozesse_und_Threads/README.html">07 - Prozesse und Threads</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../P08_Sync/README.html">08 - Synchronisationsprobleme</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../P09_File_Operations/README.html">09 - File Operations</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../P10_IPC/README.html">10 - IPC</a></li>
|
||
</ul>
|
||
|
||
<div class="relations">
|
||
<h3>Related Topics</h3>
|
||
<ul>
|
||
<li><a href="../index.html">Documentation overview</a><ul>
|
||
<li>Previous: <a href="../P03_Bit_Operation_struct_typedef/README.html" title="previous chapter">03 - Bit Operationen, Struct, Typedef</a></li>
|
||
<li>Next: <a href="../P06_Personen_Verwaltung_Linked_List/README.html" title="next chapter">06 - Personen Verwaltung – Linked List</a></li>
|
||
</ul></li>
|
||
</ul>
|
||
</div>
|
||
<div id="searchbox" style="display: none" role="search">
|
||
<h3 id="searchlabel">Quick search</h3>
|
||
<div class="searchformwrapper">
|
||
<form class="search" action="../search.html" method="get">
|
||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||
<input type="submit" value="Go" />
|
||
</form>
|
||
</div>
|
||
</div>
|
||
<script>$('#searchbox').show(0);</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="footer">
|
||
©2022, stsh.
|
||
|
||
|
|
||
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.3.2</a>
|
||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||
|
||
|
|
||
<a href="../_sources/P05_TicTacToe/README.md.txt"
|
||
rel="nofollow">Page source</a>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
</body>
|
||
</html> |