<p>Bevor Sie mit den Programmieraufgaben beginnen, setzen Sie eine virtuelle Maschine mit der vorbereiteten Praktikumsumgebung auf. Die entsprechende Anleitung finden Sie hier: <aclass="reference external"href="https://github.zhaw.ch/SNP/snp-lab-env/blob/master/docs/Arbeitsumgebung_f%C3%BCr_die_Praktika.pdf">https://github.zhaw.ch/SNP/snp-lab-env/blob/master/docs/Arbeitsumgebung_f%C3%BCr_die_Praktika.pdf</a>.</p>
<h2>2. Lernziele<aclass="headerlink"href="#lernziele"title="Permalink to this headline">¶</a></h2>
<p>In diesem Praktikum schreiben Sie selbst von Grund auf einige einfache C-Programme und wenden verschiedene Kontrollstrukturen an.</p>
<ulclass="simple">
<li><p>Sie können mit <em>#include</em> Funktionen der C Standard Library einbinden</p></li>
<li><p>Sie können mit <em>#define</em> Macros definieren und diese anwenden</p></li>
<li><p>Sie wenden die <em>Input-</em> und <em>Output-Funktionen</em> von C an, um Tastatur-Input einzulesen und formatierte Ausgaben zu machen.</p></li>
<li><p>Sie verwenden die Kommandozeile, um ihren Sourcecode in ein ausführbares Programm umzuwandeln.</p></li>
<li><p>Sie wenden for-und while-Loops sowie if-then-else-Verzweigungen an.</p></li>
<li><p>Sie setzen eine Programmieraufgabe selbständig in ein funktionierendes Programm um.</p></li>
</ul>
</section>
<hrclass="docutils"/>
<sectionid="aufgabe-1-virtuelle-maschine">
<h2>3. Aufgabe 1: virtuelle Maschine<aclass="headerlink"href="#aufgabe-1-virtuelle-maschine"title="Permalink to this headline">¶</a></h2>
<p>Im Moodle-Kurs “Systemnahe Programmierung” finden Sie unter “Praktika” eine Installationsanleitung für die virtuelle Maschine, die wir Ihnen zur Verfügung stellen. Die virtuelle Maschine enthält ein Ubuntu Linux-Betriebssystem und die für das Praktikum benötigten Frameworks.</p>
<p>Folgen sie der Anleitung, um die virtuelle Maschine auf ihrem Rechner zu installieren.</p>
</section>
<hrclass="docutils"/>
<sectionid="aufgabe-2-hello-world">
<h2>4. Aufgabe 2: Hello World<aclass="headerlink"href="#aufgabe-2-hello-world"title="Permalink to this headline">¶</a></h2>
<p>Schreiben Sie ein C-Programm, das “Hello World” auf die Standardausgabe schreibt. Verwenden Sie die printf-Funktion aus der Standard Library. In den Vorlesungsfolien finden Sie bei Bedarf eine Vorlage.</p>
<p>Erstellen sie das Source-File mit einem beliebigen Editor, sie benötigen nicht unbedingt eine IDE. Speichern Sie das Source-File mit der Endung <codeclass="docutils literal notranslate"><spanclass="pre">.c</span></code>.</p>
<p>Um ihr Source-File zu kompilieren, verwenden Sie den GNU Compiler auf der Kommandozeile:</p>
<p>Der Compiler übersetzt ihr Programm in eine ausführbare Datei <codeclass="docutils literal notranslate"><spanclass="pre">a.out</span></code>, die Sie mit</p>
<p>ausführen können. Sie können den Namen der ausführbaren Datei wählen, indem Sie die Option <codeclass="docutils literal notranslate"><spanclass="pre">-o</span></code> verwenden:</p>
<p>erzeugt die ausführbare Datei <codeclass="docutils literal notranslate"><spanclass="pre">hello</span></code>.</p>
<p>Verwenden Sie die Option <codeclass="docutils literal notranslate"><spanclass="pre">-Wall</span></code>, um alle Warnungen des Compilers auszugeben. Dies weist Sie auf allfällige Programmierfehler hin.</p>
</section>
<hrclass="docutils"/>
<sectionid="aufgabe-3-tabellenausgabe">
<h2>5. Aufgabe 3: Tabellenausgabe<aclass="headerlink"href="#aufgabe-3-tabellenausgabe"title="Permalink to this headline">¶</a></h2>
<p>Schreiben Sie ein Programm in C, das von <codeclass="docutils literal notranslate"><spanclass="pre">stdin</span></code> einen Umrechnungsfaktor zwischen CHF und Bitcoin einliest und danach eine Tabelle von Franken- und Bitcoin-Beträgen ausgibt. Die Tabelle soll sauber formatiert sein, z.B. so:</p>
<li><p>Verwenden Sie eine Schleife und die <codeclass="docutils literal notranslate"><spanclass="pre">printf</span></code>-Funktion für die Tabellenausgabe</p></li>
<li><p>Definieren Sie ein Makro <codeclass="docutils literal notranslate"><spanclass="pre">NUM_ROWS</span></code>, um an zentraler Stelle im Source-Code zu definieren, wie viele Einträge die Tabelle in der Ausgabe haben soll.</p></li>
<li><p>Lesen Sie den Umrechnungsfaktor mit der <codeclass="docutils literal notranslate"><spanclass="pre">scanf</span></code>-Funktion als <codeclass="docutils literal notranslate"><spanclass="pre">double</span></code> von der Kommandozeile ein.</p></li>
</ul>
</section>
<hrclass="docutils"/>
<sectionid="aufgabe-4-zeichen-und-worter-zahlen">
<h2>6. Aufgabe 4: Zeichen und Wörter zählen<aclass="headerlink"href="#aufgabe-4-zeichen-und-worter-zahlen"title="Permalink to this headline">¶</a></h2>
<p>Schreiben Sie ein C-Programm, welches die Zeichen und Wörter einer mit der Tastatur eingegebenen Zeile zählt. Wortzwischenräume sind entweder Leerzeichen (’‘) oder Tabulatoren (’\t’). Die Eingabe der Zeile mit einem newline-character (‘\n’) abgeschlossen. Danach soll ihr Programm die Anzahl Zeichen und die Anzahl Wörter ausgeben und terminieren.</p>
<li><p>Verwenden Sie die <codeclass="docutils literal notranslate"><spanclass="pre">char</span><spanclass="pre">getchar(void)</span></code> Funktion aus der <codeclass="docutils literal notranslate"><spanclass="pre">stdio.h</span></code> Library, um die Zeichen einzeln einzulesen. Die Funktion <codeclass="docutils literal notranslate"><spanclass="pre">getchar</span></code> kehrt nicht gleich bei Eingabe des ersten Zeichens zurück, sondern puffert die Daten, bis die Eingabe einer kompletten Zeile mit Return abgeschlossen wird. Dann wird das erste Zeichen aus dem Puffer zurückgegeben und mit weiteren Aufrufen von getchar können die nachfolgenden Zeichen aus dem Puffer gelesen werden. Gibt <codeclass="docutils literal notranslate"><spanclass="pre">getchar</span></code> das Zeichen <codeclass="docutils literal notranslate"><spanclass="pre">\n</span></code> zurück, ist die Zeile komplett zurückgegeben und der Puffer ist wieder leer.</p></li>
<li><p>Setzen Sie eine Schleife ein, die beim Zeichen ‘\n’ terminiert.</p></li>
<li><p>Benutzen Sie if-then-else-Strukturen um die Wörter zu zählen.</p></li>
</ul>
</section>
<hrclass="docutils"/>
<sectionid="bewertung">
<h2>7. Bewertung<aclass="headerlink"href="#bewertung"title="Permalink to this headline">¶</a></h2>
<p>Die gegebenenfalls gestellten Theorieaufgaben und der funktionierende Programmcode müssen der Praktikumsbetreuung gezeigt werden. Die Lösungen müssen mündlich erklärt werden.</p>