Programmierkurs C++

22
Zentrum für Angewandte Informatik Köln Arbeitsgruppe Faigle / Schrader Universität zu Köln Kurs 6108 Programmierkurs C++ Wintersemester 2001/02 Prof. R. Schrader Nils Eissfeldt [email protected] 470 - 6026 Jürgen Gräfe [email protected] 470 - 6010 Vorlesung freitags 15:15–16:45 Uhr Sprechstunde dienstags 10:00–11:00 Uhr Weyertal 80, 2. Etage links http://www.zaik.uni-koeln.de/AFS/teachings/courses/ProgKurs/ WS 2001/02 Programmierkurs C++ Seite 1

Transcript of Programmierkurs C++

Page 1: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Kurs 6108

Programmierkurs C++Wintersemester 2001/02

Prof. R. Schrader

Nils [email protected]

470 - 6026

Jürgen Grä[email protected]

470 - 6010

Vorlesung freitags 15:15–16:45 Uhr

Sprechstunde dienstags 10:00–11:00 Uhr

Weyertal 80, 2. Etage links

http://www.zaik.uni-koeln.de/AFS/teachings/courses/ProgKurs/

WS 2001/02 Programmierkurs C++ Seite 1

Page 2: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

1 Vorbemerkungen

1.1 Vorraussetzungen und Ziele

• Es sind keine Vorkenntnisse nötig

• Es gibt keine Scheine

• Vermittelt werden:

– Grundkenntnisse der Programmierung in C++

– Konzept der objektorientierten Programmierung

– Verwendung der Standardbibliotheken

1.2 Übungsaufgaben

• Kursbegleitende Übungsaufgaben werden gestellt

• Die Aufgaben werden nicht korrigiert

• Musterlösungen werden in der Vorlesung besprochen

Grundsätzlich können wir in diesem Rahmen nur das

Handwerkszeug zum Programmieren an die Hand geben. Um

programmieren zu lernen muß man programmieren üben.

WS 2001/02 Programmierkurs C++ Seite 2

Page 3: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

1.3 Homepage

http://www.zaik.uni-koeln.de/AFS/

teachings/courses/ProgKurs/

Auf der Internetseite zu diesem Kurs finden sich weitere

Informationen

• Literaturhinweise

• Mailingliste

• Beantragen eines Accounts

• Folien und Beispielprogramme

• Übungsaufgaben und Musterlösungen

WS 2001/02 Programmierkurs C++ Seite 3

Page 4: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

1.4 Arbeiten am Computer

Die Beispiele, Übungen und Musterlösungen werden

systemunabhängig gestaltet und lassen sich mit jedem

aktuellen C++ Compiler unabhängig vom verwendeten

Betriebssystem übersetzen.

Arbeiten in der UNI

Für das Arbeiten an der UNI steht der SUN-Pool zur

Verfügung:

Pohligstraße, 3. Etage

Mo.–Fr. 9:00 – 17:00 Uhr (ggf. in der 5. Etage melden)

WS 2001/02 Programmierkurs C++ Seite 4

Page 5: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Arbeiten zu Hause

Besonders empfehlenswert ist das Arbeiten unter Linux, da

dort der Compiler und viele nützliche Tools für das

Programmieren bereits vorhanden sind. Außerdem ist Linux

kostenlos. CD’s mit aktuellen Linux-Distributionen kann man

sich im Rechenzentrum kopieren.

Auch unter Windows gibt es (neben kommerziellen

Compilern wie Visual C++) kostenlose Compiler. Auf

unseren WWW-Seiten findet sich ein Link zu Cygwin,

welches neben einer UNIX-Artigen Umgebung für Windows

auch den unter Linux verbreiteten GNU C++-Compiler

enthält.

WS 2001/02 Programmierkurs C++ Seite 5

Page 6: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

2 Grundlagen

2.1 Allgemeiner Aufbau eines Computers

Die wesentlichen Komponenten lassen sich folgendermaßenkategorisieren:

CPU

Speicher

Tastatur / MausBildschirm

Festplatte Netzwerk

CPU Die Central Processing Unit führt die notwendigenBerechnungendurch, macht logische Verknüpfungen,bearbeitet Daten, steuert das Verhalten allerKomponenten des Computers, regelt IO

Die CPU liest den Programmcode aus dem Speicher undführt ihn aus.

SpeicherDieser enthält die Daten und den Programmcodedie von der CPU benötigt werden.

Ein- und Ausgabegeräte (I/O)Dienen z.B. als Schnittstellezum Benutzer, zum Datenaustausch oder alsMassenspeicher.

WS 2001/02 Programmierkurs C++ Seite 6

Page 7: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

2.2 Allgemeiner Softwareaufbau

Anwendungsprogramme

BenutzerSchnittstelle

Bibliotheks-Routinen

Betriebssystem

Hardware

Betriebssystem

Das Betriebssystem steuert alle Betriebsabläufe imComputer. Darunter fallen:

• Laden, Ausführen und Abbrechen von Programmen

• Organisation des Speichers

• Zugriff auf Peripheriegeräte

• Organisation und Verwaltung der Festplattendaten

• Verwaltung von Zeitscheiben bei gleichzeitigerAusführung von Programmen (Multitasking)

• Verwaltung des Benutzerzugangs

• Verwaltung von Zugriffsrechten auf Daten

WS 2001/02 Programmierkurs C++ Seite 7

Page 8: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Benutzerschnittstelle

• Komanndointerpreter (Shell) bieten die Möglichkeitinteraktiv Befehle auszuführen.

• Fenstersysteme wie XWindows stellen grafischeOberflächen für Programme zur Verfügung.

Bibliotheksroutinen

Vorgefertigte Unterprogramme, welche in Bibliothekenzusammengefasst werden, können in eigenen Programmenverwendet werden.

Anwendungssoftware

übrige Software mit den unterschiedlichsten Aufgaben, z.B.

• Werkzeuge zur Programmerstellung

• Editoren (XEmacs, vim, pico)

• Compiler (gcc, g++)

• Textverarbeitungen (soffice)

• WWW-Browser (lynx, opera, netscape)

• E-Mail Programme (pine, mutt)

WS 2001/02 Programmierkurs C++ Seite 8

Page 9: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

2.3 Dateien und Verzeichnisse (Unix)

Dateien sind abstrakte Gebilde zur Speicherung von Daten

auf einem Speichermedium wie Festplatte oder Diskette.

• Jede Datei hat einen Namen

• Unix verwaltet die Zugriffsrechte

• Dateien werden in Verzeichnissen abgelegt

• Verzeichnisse können mehre Dateien und auch weitere

Unterverzeichnisse enthalten

Es ergibt sich eine Baumförmige Struktur von Dateien und

Verzeichnissen:

/ etc

home

usr

tmp

eissfeldt

graefe

datei-1

datei-2

Datei 1

...

...

...

WS 2001/02 Programmierkurs C++ Seite 9

Page 10: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Für Verzeichnisse gelten folgende Regeln:

• Das Wurzelverzeichnis (root) wird mit einem/ (Slash)

bezeichnet.

• Dateien werden durch Aneinanderreihung von

Katalognamen eindeutig bestimmt (Pfade).

• Pfade die mit / beginnen starten im Wurzelverzeichnis,

ansonsten im aktuellen Verzeichnis.

• Mit cd kann man zwischen Verzeichnissen wechseln.

• Jedes Verzeichnis enthält Verweise auf sich (.) und auf

das übergeordnete Verzeichnis (..)

• Jeder Benutzer hat ein eigenes Verzeichnis

/home/<Benutzername> (Home)

• Dieses Verzeichnis heißt auch~

WS 2001/02 Programmierkurs C++ Seite 10

Page 11: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

2.4 Wichtige Befehle und Programme

man Zeigt die Hilfe zu einem Befehl oder Pro-

gramm an. Mitman ls wird z.B. die Benut-

zung vonls erklärt.

ls zeigt den Inhalt eines Verzeichnisses an; mit

ls -l auch etwas ausführlicher.

cp Kopiert den Inhalt einer Datei in eine andere

Datei. Verzeichnisse mitcp -r kopieren.

mv Verschiebt eine Datei in ein anderes Verzeich-

nis oder benennt die Datei um.

rm Löschen einer Datei oder eines Verzeichnisses.

mkdir Erstellen eines Verzeichnisses.

cd Wechselt in das angegebene Verzeichnis

grep sucht eine Zeichenkette in Dateien.

cat Zeigt eine Datei am Bildschirm an.

WS 2001/02 Programmierkurs C++ Seite 11

Page 12: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

2.5 Benötigte Werkzeuge zurProgrammentwicklung

Um Programme zu erstellen werden folgende Werkzeug

benötigt:

• Ein Editor (z.B. Emacs/XEmacs, vim, pico) zum

Erstellen der Quelltexte.

• DerCompiler (g++) wandelt den Quelltext in die für

den Computer lesbare Maschinensprache um.

• DerLinker (ld ) verbindet ein oder mehrere Dateien mit

Maschinensprache zu einem Programm.

• Debugger(gdb, dbx) helfen dem Entwickler Fehler im

Quelltext zu finden.

Zu beachten ist, daß der Linker oft vom Compiler

automatisch aufgerufen wird und nicht extra gestartet werden

muß.

WS 2001/02 Programmierkurs C++ Seite 12

Page 13: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Diese Programme werden von der Shell ausgeführt, welchenach dem Anmelden in einemXTerm-Fenster zur Verfügungsteht:

Beispiele von Kommandos, welche in der Shell ausgeführtwerden schreiben wir innerhalb des Programmierkurses infolgender Form:

$ kommando

wobei$ den Benutzer- und systemabhängigen Promptbezeichnet, welcher in einer Shell erscheint und zu einerEingabe auffordert.

WS 2001/02 Programmierkurs C++ Seite 13

Page 14: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Programme werden mit einem Editor erstellt. Durch den

Aufruf von

$ xemacs first.cc

wird der Editor XEmacs gestartet und die Dateifirst.cc

geöffnet. Ist diese nicht vorhanden wird eine leere Datei

angelegt.

XEmacs kann sowohl über die Menüs mit der Maus, als auch

über die Tastatur durch sogenannte Tastenkürzel gesteuert

werden.

WS 2001/02 Programmierkurs C++ Seite 14

Page 15: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Die wichtigsten Tastenkürzel im XEmacs lauten:

^H t Startet ein Tutorial

^H i Öffnet die Info-Seiten zum XEmacs

^X u Änderung zurücknehmen

^X^C Editor beenden

^X^F Datei öffnen

^X^S Datei speichern

^X^W Speichert die Datei unter einen anderen Namen

^S Suchen innerhalb der geöffneten Datei

^R Sucht rückwärts

wobei^X bedeutet, daß die TasteX zusammen mit der

Control- bzw. Steuerungstaste zu betätigen ist.

Empfehlenswert ist das durchH t aufzurufende Tutorial,

welches den ungeübten Benutzer mit XEmacs vertraut macht.

WS 2001/02 Programmierkurs C++ Seite 15

Page 16: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Nach dem Bearbeiten der Quelldatei kann sie mit dem

Compiler in ein für den Computer ausführbares Format

gebracht werden. Dies geschieht mit Eingabe des Befehls

$ g++ first.cc

nach einer kurzen Wartezeit wurde die Dateia.out erstellt.

Will man einen anderen Namen, so kann man diesen mit dem

Parameter-o angeben. Mit

$ g++ -o first first.cc

wird die Dateifirst anstatta.out erstellt. Diese kann

jetzt aufgerufen werden und liefert eine entsprechende

Ausgabe.

$ ./first

Dies ist mein erstes C++ Programm

Wichtig hierbei ist die Angabe des Pfades./ vor dem

Dateinamen. Unix sucht normalerweise keine ausführbaren

Programme im aktuellen Verzeichnis, so daß dieses explizit

angegeben werden muß.

WS 2001/02 Programmierkurs C++ Seite 16

Page 17: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Oft läßt sich das geschriebene Programm aufgrund von

Fehlern nicht vom Compiler übersetzten:

$ g++ -o first first.cc

first.cc: In function ‘int main()’:

first.cc:9: parse error before ‘return’

Es werden aber Informationen darüber gegeben wo der

Fehler zu finden ist. So hat der Compiler in Zeile 9 ein

Problem gemeldet.

1 / / Dies i s t mein e r s t e s Programm i n C++2 # inc lude< i o s t r e a m >3 us ing namespace s t d ;45 i n t main ( )6 {7 cou t < < " Dies i s t mein " ;8 cou t < < " e r s t e sC++ Programm " << end l ;9 re turn 0 ;

10 }

Zurückzuführen ist dies auf ein vergessenes Semikolon in der

vorangehenden Zeile, wodurch der Befehlreturn nicht

erkannt werden konnte.

WS 2001/02 Programmierkurs C++ Seite 17

Page 18: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

2.6 Programme und Programmiersprachen

Was ist ein Programm?

• Programmieren heißt, einem Computer mitzuteilen, was

er tun soll und wie er es zu tun hat.

• Ein Programm beschreibt einen Algorithmus, dh. eine

endliche Folge eindeutiger Anweisungen.

• Ein Programm ist eine in einer formalisierten Sprache

(Programmiersprache) ausgedrückte Folge von

Anweisungen, die vom Computer verstanden und

nacheinander abgearbeitet wird.

WS 2001/02 Programmierkurs C++ Seite 18

Page 19: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Welche Sprache spricht ein Computer?

Die Hardware des Computers, insbesondere der Prozessor,

besteht aus logischen Bausteinen (UND, ODER, NICHT,...)

und arbeitet intern nur mit den Werten 0 (falsch) und 1

(wahr).

Grund: Diese Werte lassen sich elektrische einfach

realisieren, z.B. Strom fließt bzw. Strom fließt nicht.

Der Computer versteht also nur Binärdaten.

• Befehle für den Prozessor und Daten werden in

0/1-Folgen kodiert

( 00110110 )

( 01100100 )

( 11110110 )...

• Zahlen werden als Dualzahlen dargestellt

WS 2001/02 Programmierkurs C++ Seite 19

Page 20: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Das Schreiben von Binärcode ist viel zu unübersichtlich undunverständlich.

• Vereinfachung durch symbolische Beschreibung dereinzelnen Maschinenbefehle⇒ Assembler

MOV AX, 0

ADD AX, x00AC

JMP x0815

– der Assembler-Code istprozessorabhängigund wirddurch geeignete Programme in Maschinencodeübersetzt.

– Für spezielle Anwendungen wird Assembler auchheute noch verwendet (zeitkritische Anwendungen,hardwarenahe Programmierung).

• Vereinfachung durch Beschreibung des Programms ineiner maschinenunabhängigen Sprache, die den Benutzermöglichst gut unterstützt⇒ höhere Programmiersprache.

– Beispiele sind: C/C++, Pascal, Java, Basic, Perl,Python, ...

– Der Programmtext muß von einem Programm, demCompiler, in Maschinencode übersetzt werden.

– Nur der Compiler ist maschinenabhängig.

WS 2001/02 Programmierkurs C++ Seite 20

Page 21: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

Beispiel: Nullstellen eines Polynoms

• Problem: Wie lauten die Nullstellen der Funktion

f : R→ R mit f(x) = ax2 + bx+ c?

• Eingabedaten:a, b, c ∈ R

• Algorithmus:

1. berechne DiskriminanteD = b2 − 4ac

2. Wenn D > 0, weiter mit Schritt 6.

3. Wenn D = 0, weiter mit Schritt 8.

4. f hat keine reellen Nullstellen

5. fertig

6. f hat zwei Nullstellen:−b+√D

2a und −b−√D

2a

7. fertig

8. f hat die doppelte reelle Nullstelle−b2a

9. fertig

WS 2001/02 Programmierkurs C++ Seite 21

Page 22: Programmierkurs C++

Zentrum für Angewandte Informatik KölnArbeitsgruppe Faigle / SchraderUniversität zu Köln

1 / / D ieses Programm b e r e c h n e t d i e N u l l s t e l l e n e i n e s2 / / Polynoms zwe i t en Grades f ( x ) = ax ^2+bx+c3 # inc lude < i o s t r e a m >4 # inc lude < cmath>5 us ing namespace s t d ;67 i n t main ( )8 {9 / / E ingabeda ten a , b , c

10 f l o a t a , b , c ;1112 / / Wert zu r s p e i c h e r u n g der De te rm inan te13 f l o a t D;1415 / / E i n l e s e n der Pa rame te r durch den Benu tze r16 c i n > > a > > b > > c ;1718 / / Berechnen der De te rm inan te19 D = b ∗ b − 4 . 0 ∗ a ∗ c ;2021 i f ( D = = 0 ) / / Doppe l te r e e l e N u l l s t e l l e22 {23 cou t < < " Doppe l te N u l l s t e l l e : "24 <<−b / ( 2 . 0 ∗ a ) < < end l ;25 }26 e l s e i f ( D > 0 ) / / Zwei N u l l s t e l l e n27 {28 cou t < < " N u l l s t e l l e 1: "29 < < ( s q r t ( D)− b ) / ( 2 . 0 ∗ a )30 << end l ;31 cou t < < " N u l l s t e l l e 2: "32 << (− s q r t ( D) − b ) / ( 2 . 0 ∗ a )33 << end l ;34 }35 e l s e cou t < < " Keine N u l l s t e l l e n " << end l ;36 }

WS 2001/02 Programmierkurs C++ Seite 22