15.02.2014 Aufrufe

praktikum informatik i / modul 1 - Fachhochschule Düsseldorf

praktikum informatik i / modul 1 - Fachhochschule Düsseldorf

praktikum informatik i / modul 1 - Fachhochschule Düsseldorf

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!