praktikum informatik i / modul 1 - Fachhochschule Düsseldorf
praktikum informatik i / modul 1 - Fachhochschule Düsseldorf
praktikum informatik i / modul 1 - Fachhochschule Düsseldorf
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
F H D F B 4<br />
<strong>Fachhochschule</strong> <strong>Düsseldorf</strong> Fachbereich Maschinenbau und Verfahrenstechnik<br />
PRAKTIKUM INFORMATIK I / MODUL 1<br />
Kommandozeilen-Programm mit Aus- und Eingabe<br />
1 Einführung<br />
Ein "Kommandozeilen-Programm" benötigt keine grafische Benutzeroberfläche. Es wird durch<br />
ein Kommando in einem Textfenster des Betriebssystems gestartet. Unter Linux-<br />
Betriebssystemen und Mac OS X kann ein Terminalfenster (auch "Shell-Fenster" genannt)<br />
geöffnet werden. Unter Windows-Betriebssystemen öffnet man das Terminalfenster im<br />
Startmenü durch den Befehl "cmd" im Menüpunkt "Ausführen". Unter grafischen<br />
Benutzeroberflächen kann ein Kommandozeilen-Programm auch durch Doppelklicken auf die<br />
Programmdatei gestartet werden.<br />
Die Eingaben und die Ausgaben von Kommandozeilen-Programmen sind Textzeichen, die i.d.R.<br />
direkt in dem Terminalfenster mit Hilfe der Tastatur eingegeben werden bzw. dort angezeigt<br />
werden. Textzeichen werden in der Programmierung mit Hilfe von Zeichentabellen dargestellt,<br />
die jedem Zeichen einen Zahlenwert zuordnen. Die Standard-Zeichentabelle für einfache Einund<br />
Ausgaben ist die sogenannte ASCII-Tabelle. siehe z.B.: http://de.wikipedia.org/wiki/ASCII.<br />
Das Leerzeichen (SP, engl. space oder blank), zum Beispiel, hat den hexadezimalen Zahlencode<br />
0x20. Das Zeichen 0 wird mit der Hexadezimalzahl 0x30 dargestellt, was dem Dezimalwert 48<br />
entspricht (3*16 + 0 == 4*10 + 8). Das Zeichen A hat den Dezimalwert 65 (4*16 + 1).<br />
Stand: September 2013, © Thomas Zielke
PRAKTIKUM INFORMATIK I / MODUL 1<br />
Seite 2<br />
!"#$%&'()<br />
*%+,('-)<br />
3.'&4'#45:/+2'7")8+.41/.9)<br />
!'+.'./#)<br />
:/+2'7");
PRAKTIKUM INFORMATIK I / MODUL 1<br />
Seite 3<br />
Standard-Ausgabe-Kanal geschickt. Alle anderen Programmzeilen, von #include bis },<br />
bilden den Programmrahmen, der in diesem Praktikums<strong>modul</strong> für alle Übungsprogramme<br />
verwendet werden soll. Der gesamte auszuführende Programmcode, also die Anweisungen, die<br />
der Prozessor ausführen soll, stehen zwischen den beiden geschweiften Klammern { } . Text<br />
der durch /* und */ eingeschlossen ist, wird als Kommentar, ohne Auswirkung auf die<br />
Programmausführung, behandelt.<br />
Der Ausgabetext ist im Aufruf der Funktion printf von doppelten geraden Anführungszeichen<br />
(engl.: quotation mark, ") umschlossen. Diese beiden Zeichen markieren Anfang bzw. Ende der<br />
Zeichenkette (engl.: string). Sie gehören nicht zu den Zeichen, die ausgegeben werden!<br />
3 Web-basierte Programmierübungen mit dem "Onlinecompiler"<br />
Für die ersten Programmierübungen verwenden wir ein web-basiertes Programmierwerkzeug. Im<br />
Unterschied zu einer richtigen Programm-Entwicklungsumgebung (oft IDE genannt, für engl.:<br />
integrated development environment) kann mit dem "Onlinecompiler" kein ausführbares<br />
Programm auf dem eigenen Rechner erstellt werden.<br />
Bei dem web-basiertes Programmierwerkzeug wird auf einer Webseite der C-Programmcode in<br />
ein Textfeld geschrieben. Außerdem gibt es ein separates Textfeld für die Benutzer-Eingaben,<br />
die das Programm bei seiner Ausführung normalerweise direkt von der Tastatur lesen würde.<br />
Nach dem Abschicken des Webformulars wird der Programmcode auf dem Server zunächst<br />
darauf überprüft, ob die Syntax ("Rechtschreibung") korrekt ist. Wenn der Programmcode<br />
Syntaxfehler enthält werden entsprechende Fehlermeldungen angezeigt. Falls das Programm<br />
übersetzt (compiliert) und ausgeführt werden kann, dann werden eventuelle Programmausgaben<br />
auf der Webseite des Onlinecompilers angezeigt.<br />
3.1 Übung 1: Übersetzen und Ausführen des "Hello World"-Programms<br />
Gehen Sie auf die Webseite<br />
http://C.mv.fh-duesseldorf.de/ (oder kurz: cvis.de)<br />
Geben Sie dort das "Hello world"-Programm ein. Die Kommentare /* ... */ können Sie alle oder<br />
auch nur einige weglassen, wie Sie möchten.<br />
• Schicken Sie dann das Webformular mit dem Programm durch Drücken der Schaltfläche<br />
ab.<br />
• Kontrollieren Sie die Ausgabe des Programms.<br />
Wird exakt der Text (die Zeichenkette) ausgeben, den (die) Sie mit dem printf<br />
Funktionsaufruf programmiert haben?<br />
• Für die Ausgabe eines einzelnen Zeichens kann man alternativ zur Funktion printf die<br />
Funktion putchar verwenden. Mit der Programmzeile
PRAKTIKUM INFORMATIK I / MODUL 1<br />
Seite 4<br />
putchar('!');<br />
wird ein einzelnes Ausrufezeichen ausgeben. Verändern Sie das Programm so dass<br />
"Hello world" von der Funktion printf und das Ausrufezeichen anschließend von der<br />
Funktion putchar ausgegeben wird.<br />
• Variieren Sie den Text und produzieren Sie damit andere Ausgaben,<br />
wie z.B. Hallo Welt?. Vergewissern Sie sich, dass immer genau die Zeichenkette<br />
ausgegeben wird, die Sie mit Ihrem Programm tatsächlich ausgeben wollen.<br />
4 Arbeiten mit dem Format-String der printf Funktion<br />
#include <br />
int main (void)<br />
char<br />
{<br />
printf("Hello world%c \n %i", '!', 2013);<br />
int<br />
return 0;<br />
}<br />
Parameterliste der Funktion printf ("..." , ... , ...)<br />
Der erste Parameter der printf Funktion, der Textteil zwischen der runden Klammer auf und<br />
dem ersten Komma, ist eine Zeichenkette ("...") und wird Format-String genannt. In der 1.<br />
Übung haben Sie gesehen, dass der Text in dieser Zeichenkette, in diesem Fall "Hello world!",<br />
von printf auf dem Bildschirm ausgegeben wird (Standard-Ausgabe-Kanal).<br />
Der Format-String kann auch Sonderzeichen enthalten, die anders als normaler Text, nicht direkt<br />
ausgegeben werden, sondern eine spezielle "Anweisung" für die Funktion printf darstellen.<br />
Das Beispiel printf("Hello world%c \n %i", '!', 2013) enthält drei spezielle<br />
"Anweisungen":<br />
%c ist ein Formatelement, das einen Platzhalter für ein einzelnes Zeichen darstellt<br />
(character ist das englische Wort für Zeichen). Das tatsächlich auszugebene Zeichen an<br />
dieser Stelle wird als ein weiterer Parameter der Funktion printf übergeben (hier das<br />
Ausrufezeichen umschlossen von zwei einfachen Anführungszeichen '!').<br />
%i ist ein Formatelement, das einen Platzhalter für eine ganze Zahl darstellt (integer<br />
bedeutet im Englischen "ganze Zahl").<br />
\n steht für das "neue Zeile Zeichen" (engl.: newline). Es bewirkt, dass das nächste<br />
Zeichen in einer neuen Zeile auf dem Bildschirm ausgegeben wird. \n besteht aus zwei<br />
Zeichen, dem umgekehrten Schrägstrich und dem Kleinbuchstaben n. In der Ausgabe<br />
erzeugt diese Zeichenkombination aber ein einzelnes Sonderzeichen, nämlich das<br />
Newline-Zeichen.
PRAKTIKUM INFORMATIK I / MODUL 1<br />
Seite 5<br />
4.1 Übung 2: Mehrzeiligen Text ausgeben und Formatelemente anwenden<br />
• Lassen Sie das Programmbeispiel aus diesem Abschnitt übersetzen und ausführen.<br />
• Analysieren Sie die Ausgaben des Programms genau. Können Sie jedes einzelne Zeichen<br />
und die Zeilenumbrüche in der Ausgabe nachvollziehen?<br />
• Fügen Sie Ihren Vornamen in den Format-String ein, ersetzen Sie die Jahreszahl durch<br />
Ihre Matrikelnummer und ändern Sie das Ausrufezeichen in ein Semikolon. Außerdem<br />
sorgen Sie dafür, dass die Ausgabe jetzt aus insgesamt 3 Zeilen besteht. Bitte durch<br />
Übersetzen und Ausführen testen!<br />
• Fügen Sie %s als ein weiteres Formatelement hinter Ihrem Vornamen in den Format-<br />
String ein. %s ist ein Platzhalter für eine Zeichenkette. Ergänzen Sie nun die<br />
Parameterliste der printf Funktion, so dass in der Ausgabe hinter Ihrem Vornamen der<br />
Nachname erscheint. Erinnerung: Zeichenketten (strings) werden von doppelten geraden<br />
Anführungszeichen (") eingeschlossen.<br />
5 Ausgabe des Inhalts von Programmvariablen<br />
#include <br />
int main (void)<br />
{<br />
int ganze_zahl= 65; /*hier wird eine int-Variable definiert*/<br />
char zeichen1= '!'; /* zeichen1 ist eine char-Variable */<br />
printf("Wert der Integer-Variablen: %i ", ganze_zahl);<br />
putchar(zeichen1);<br />
return 0;<br />
}<br />
Das vorstehende Programmbeispiel enthält die Definition zweier Variablen. Variable in<br />
Programmiersprachen sind Speicherplätze, denen man einen jeweils eindeutige Namen gibt.<br />
Variable können mit Werten beschrieben werden damit man diese Werte später im Programm<br />
wieder auslesen und verwenden kann. Der Datentyp der Variablen ganze_zahl ist int<br />
(integer ist die englische Bezeichnung einer ganzen Zahl). Die Variable ist dadurch eine<br />
Speicherstelle für einen ganzzahligen Wert. In dem gezeigten Beispiel wurde der Variablen mit<br />
dem Namen ganze_zahl der Anfangswert 65 zugewiesen. Der Datentyp der Variablen<br />
zeichen1 ist char (character ist das englische Wort für Zeichen).<br />
Mit der printf Funktion kann man den Inhalt von Variablen formatiert ausgeben. Dazu muss im<br />
Ausgabetext (Format-String) ein Formatelement für den jeweiligen Wert eingefügt werden. Das<br />
Formatelement für Integer-Werte ist %i. Die Variable selbst muss der Funktion printf als<br />
Parameter übergeben werden.
PRAKTIKUM INFORMATIK I / MODUL 1<br />
Seite 6<br />
5.1 Übung 3: Werte von Variablen ausgeben<br />
• Lassen Sie das Programmbeispiel aus diesem Abschnitt übersetzen und ausführen.<br />
• Gibt Ihr Programm genau die Textzeile "Wert der Integer-Variablen: 65 !" aus?<br />
• Definieren Sie eine zusätzliche Variable mit dem Datentyp char (den Variablen-Namen<br />
wählen Sie selbst, z.B. "neue_zeile"). Dieser Variablen soll der Anfangswert '\n'<br />
zugewiesen werden. Konstante Werte vom Typ char werden immer mit zwei einfachen<br />
Anführungszeichen (engl.: apostrophe, ') eingeschlossen.<br />
• Setzen Sie das Formatelement %c in den Format-String ein, und zwar hinter den<br />
Doppelpunkt. Setzen Sie außerdem die neue char-Variable (den von Ihnen gewählten<br />
Namen) in die Parameterliste der Funktion printf ein (richtige Reihenfolge beachten!).<br />
Welchen Effekt haben diese Änderungen auf die Programm-Ausgabe?<br />
6 Zeichen-Eingabe und Zahlen-Eingabe mit der Funktion getchar<br />
#include <br />
int main (void)<br />
{<br />
int ganze_zahl; /*int-Variable ohne Anfangswert*/<br />
char zeichen1, zeichen2; /* zwei char-Variable ohne Anfangswert */<br />
zeichen1 = getchar(); /*lese das erste Zeichen von der Tastatur*/<br />
zeichen2 = getchar(); /*lese das zweite Zeichen von der Tastatur*/<br />
printf("Eingelesene Zeichen:\n");<br />
putchar(zeichen1); putchar(zeichen2); /*Eingabezeichen wieder ausgeben*/<br />
/* Versuche die Zeichen in eine Zahl umzuwandeln */<br />
ganze_zahl = (zeichen1 - '0') * 10 + (zeichen2 - '0');<br />
printf("\nDezimalzahl aus zwei Zeichen: %i", ganze_zahl);<br />
return 0;<br />
}<br />
Die Funktion getchar holt das jeweils nächste Zeichen aus dem Standard-Eingabe-Kanal. Bei<br />
jedem Aufruf bekommt der Ausdruck getchar() den Wert des jeweils nächsten Zeichens.<br />
Oder anders ausgedrückt: Die Funktion getchar liefert bei ihrem Aufruf das jeweils nächste<br />
Zeichen als Rückgabewert.<br />
Das Gleichheitszeichen = ist in der Programmiersprache C ein Operator (der<br />
Zuweisungsoperator), der den Wert auf seiner rechten Seite in die Variable auf seiner linken<br />
Seite schreibt. Der Wert von getchar wird mit dem Zuweisungsoperator in die Variable zeichen1<br />
bzw. zeichen2 geschrieben.
PRAKTIKUM INFORMATIK I / MODUL 1<br />
Seite 7<br />
Die Differenz von zwei Zeichen ist deren Abstand in der ASCII-Zeichentabelle. Zum Beispiel<br />
haben die Differenzen '1' – '0' und 'b' – 'a' beide den Wert 1. Aber: Die Differenz<br />
'b' – 'A' ist 33!<br />
6.1 Übung 4: Zeichen-Eingabe und "Rechnen mit Zeichen"<br />
• Geben Sie das Beispielprogramm aus diesem Abschnitt zunächst nur bis zu dem<br />
Kommentar /*Eingabezeichen wieder ausgeben*/ ein. Wenn Sie diesen Programmteil<br />
ausführen werden zwei Zeichen eingelesen und unverändert ausgeben. Die<br />
Eingabezeichen müssen Sie bei dem Onlinecompiler in das "Textfeld für die<br />
Dateneingabe des Programms (stdin)" schreiben, und zwar bevor Sie das Webformular<br />
mit der Schaltfläche<br />
abschicken.<br />
• Testen Sie das Programm mit beliebigen Zeichen, z.B. auch mit dem Newline-Zeichen<br />
(Enter-Taste). Frage an Fortgeschrittene mit Computer-Vorwissen: Mit welchen Zeichen<br />
funktioniert das Programm nicht richtig wenn man den Online-Compiler benutzt?<br />
Welches Zeichen wäre ein konkretes Beispiel?<br />
• Vervollständigen Sie nun das Programm. Die Programmzeile ganze_zahl = ...<br />
wandelt die Folge der beiden Eingabezeichen in eine zweistellige Dezimalzahl um.<br />
Dabei erhält das erste Zeichen die Stellenwertigkeit 10 und das zweite Zeichen die<br />
Wertigkeit 1. Nur wenn die beiden Eingabezeichen tatsächlich Dezimalziffern sind (0 ...<br />
1) erhält man das erwartete Ergebnis. Testen Sie auch mit anderen Zeichen und<br />
versuchen Sie das jeweilige Ergebnis nachzuvollziehen.<br />
7 Rechnen mit Programmvariablen<br />
#include <br />
int main (void)<br />
{<br />
int a = 15;<br />
int b, c;<br />
b = 3; /* hier wird b ein Wert zugewiesen */<br />
c = a + b; /* Summe von a und b an c zuweisen */<br />
printf("a+b= %i", c);<br />
return 0;<br />
}
PRAKTIKUM INFORMATIK I / MODUL 1<br />
Seite 8<br />
Das Beispielprogramm in diesem Abschnitt enthält drei Integer-Variable mit den Namen a, b<br />
und c. Mit der Anweisung c = a + b; erhält die Variable c den Wert, der durch die<br />
Addition der Werte von a und b berechnet wird. Die Werte der Variablen a und b ändern sich<br />
dadurch nicht. Anders als in der Mathematik bedeutet c=a+b nicht, dass auf beiden Seiten des<br />
Gleichheitszeichens gleiche Werte bzw. Größen stehen. Vielmehr ist das Gleichheitszeichen (=)<br />
in der Programmiersprache C ein Operator (der Zuweisungsoperator), der einer Speicherstelle<br />
einen neuen Wert zuweist. Der Variablen (Speicherstelle) links von dem Gleichheitszeichen wird<br />
genau der Wert zugewiesen, der auf der rechten Seite steht bzw. dort als Wert eines Ausdrucks,<br />
wie z.B. "a + b", berechnet wird. Das Pluszeichen (+) ist das Operatorsymbol für die<br />
Addition.<br />
7.1 Übung 5: Wertzuweisung an eine Variable und Integer-Arithmetik<br />
• Lassen Sie das Programmbeispiel aus diesem Abschnitt übersetzen und ausführen. Die<br />
Programmausgabe muss das Ergebnis der Berechnung der Summe der beiden Variablen a<br />
und b zeigen.<br />
• Ändern Sie Ihr Programm so, dass nicht nur der Wert der Variablen c, sondern auch die<br />
Werte der Variablen a und b ausgegeben werden.<br />
• Programmieren Sie die Ausgabe des Produkts von a und b, statt der Summe. Das<br />
Operatorsymbol für die Multiplikation ist das Sternzeichen (*).<br />
• Variieren Sie das Programm durch verschiedene Zahlenwerte für a und b sowie<br />
verschiedene arithmetische Operatoren: + - * / %.<br />
• Der Operator für die Division / produziert für ganzzahlige Operanden (Integer) ebenfalls<br />
ein ganzzahliges Ergebnis. Ein weiterer arithmetischer Operator speziell für Integer-<br />
Zahlen ist der Modulo-Operator % ("Restwert-Operator"). Testen Sie den Modulo-<br />
Operator mit verschieden Werten für a und b.