Gliederung des Inhalts Einführung in die Planung und Entwicklung kleiner Computerprogramme...
-
Upload
hiltraud-geschke -
Category
Documents
-
view
105 -
download
1
Transcript of Gliederung des Inhalts Einführung in die Planung und Entwicklung kleiner Computerprogramme...
Gliederung des Inhalts
Einführung in die Planung und Entwicklung kleiner Computerprogramme
• Unterscheidung Compiler und Linker• Entwicklungsumgebung zur Erstellung von
Computerprogrammen• Aufbau eines einfachen Programms (Eingabe,
Verarbeitung, Ausgabe)• Dokumentation von Programmen (Struktogramme)• Kontrollstrukturen (Verzweigungen, Schleifen)• Einsatz von Funktionen • Datenstrukturen (Felder)• Nutzung von Zeigern• Testen von Programmen mit geeigneten Hilfsmitteln• Fehlersuche in selbsterstellten Programmen
Sprachbeschreibung
C++ basiert auf dem ANSI-Standard (American National Standards Institute)
• Darstellung der Sprache ist Plattform unabhängig• Hybridsprache (C plus OOP- objektorientierte Programmiersprache)
C++ ist von Bjarne Stroustrup bei AT&T entwickelt(um. 1980)
Erstellen eines C++-Programms
QuelldateiQuelldatei
ObjektdateiObjektdatei
ausführbare Datei
ausführbare Datei
Standard-bibliothek
Standard-bibliothek
weitere Bibliotheken,Objektdateien
weitere Bibliotheken,Objektdateien
Header-Dateien
Header-Dateien
Editor
Compiler
Linker
Aufbau eines Programms
4
#include <iostream>//Header-Dateien
int main ()
{
Ausführungen des Programms
}
}Funktionsblock
Funktionsname
Beginn der Funktion
Ende der Funktion
Typ der Funktion
Präprozessor-Anweisungen
Beispielprogramm
5
#include <iostream>
using namespace std;
int main(){
cout << "Viel Spass mit c++!!„ << endl;return 0;}
Befehl „Ausgeben auf den Bildschirm“: cout<<Variable_1<<Variable_2<<...Variable_n; cout<< „Beliebiger Text“;
Befehl „Ausgeben auf den Bildschirm“: cout<<Variable_1<<Variable_2<<...Variable_n; cout<< „Beliebiger Text“;
Erweiterung des Beispielprogramms
6
Lassen Sie folgendes auf dem Bildschirm ausgeben:
C unterscheidet zwischen Groß- und Kleinschreibung.
Die Programmausführung beginnt bei der main-Funktion.
Geschweifte Klammern markieren die Funktionsgrenze.
Ein Semikolon markiert das Ende einer Anweisung.
Elementare Datentypen
7
• Verschiedene Daten werden im Programm verarbeitet z. B. Zeichen, Ganzzahlen oder Gleitpunktzahlen
• diese werden unterschiedlich bearbeitet und gespeichert
• ein Datentyp bestimmt:1. die Art der internen Darstellung2. die Größe des zu benötigten Speicherplatzes
• der Compiler kann leichter Fehler erkennen
Elementare Datentypen
8
Gleitpunktzahlen
long double
double
float
Elementare Datentypen*
Ganzzahlen short
int
long
charZeichen
Wahrheitswerte bool
*ohne void
Schreibkonventionen in C++
bei Namen von Variablen, Funktionen, Klassen und Makronamen muss folgendes beachtet werden:
• englische Alphabet• deutsche Umlaute dürfen nur in Kommentaren oder
Zeichenketten vorkommen• Ziffern 0 bis 9 (dürfen nicht am Anfang stehen)• Unterstrich „_“• Länge nicht vorgegeben (ANSI min. 31 Zeichen)
Es wird zwischen Groß- und Kleinschreibung unterschieden!!!
Es wird zwischen Groß- und Kleinschreibung unterschieden!!!
Elementare Datentypen - Ganzzahlen
10
Typ Größe Zahlenbereich
char 8 Bit = 1 Byte -128 bis 127
unsigned char 8 Bit = 1 Byte 0 bis 255
short 16 Bit = 2 Bytes -32.768 bis 32.767
unsigned short 16 Bit = 2 Bytes 0 bis 65.535
int 32 Bit = 4 Bytes -2.147.483.648 bis 2.147.483.647
unsigned int 32 Bit = 4 Bytes 0 bis 4.294.967.295
long 32 Bit = 4 Bytes -2.147.483.648 bis 2.147.483.647
unsigned long 32 Bit = 4 Bytes 0 bis 4.294.967.295
Elementare Datentypen - Gleitpunktzahlen
11
Typ Größe Zahlenbereich Genauigkeit
float 32 Bit = 4 Bytes 1,18E-38 bis 3,40E38 7 Stellen
double 64 Bit = 8 Bytes 2,23E-308 bis 1,79E308 15 Stellen
long double80 Bit = 10 Bytes
3,37E-4932 bis 1,18E4932 18 Stellen
Operatoren - Grundsätzliches
12
In C/C++ stehen u. a. folgende Gruppen von Operatoren zur Verfügung
• arithmetische Operatoren für die grundlegenden Rechenoperationen
• Vergleichsoperatoren zur Formulierung von Bedingungen
• logische Operatoren zur Verknüpfung von Einzelbedingungen zu einer komplexen Bedingung
Hinweis:Ähnlich der Regel „Punktrechnung vor Strichrechnung“ in der Mathematik, gibt es in C/C++ eine feste Reihenfolge bei Auswertung der einzelnen Operatoren in komplexeren Ausdrücken. Insgesamt gibt es in C/C++ 16 Prioritätsstufen (Rangfolge 1: höchste Priorität, Rangfolge 16: niedrigste Priorität).Bei Zweifeln hinsichtlich der Prioritäten der Operatoren ist es ratsam, zusätzliche Klammern zu setzen.
Beispielprogramm „Summe bilden“
13
Schreiben Sie ein Programm, das zwei Fließkommazahlen über die Tastatur einliest und dann die Summe bildet und ausgibt.
1. Schritt Struktogramm
2. Schritt Programmieren
Ergänzungen:- Differenz, Produkt und Quotient
[griech.], Darstellung des Ablaufs eines Algorithmus bzw. Programms mit speziellen Symbolen. (c) Meyers Lexikonverlag.
Befehl „Einlesen über die Tastatur“: cin>>Variable_1>>Variable_2>>...Variable_n;Befehl „Einlesen über die Tastatur“: cin>>Variable_1>>Variable_2>>...Variable_n;
Beispiel: Summe bilden
14
Summe bildenAusgabe: Es wird die Summe zweier Zahlen gebildet
Ausgabe: Bitte geben Sie zwei Zahlen ein.
Eingabe: Zahl_1
Eingabe: Zahl_2
Anweisung: (Summe = Zahl_1 + Zahl_2)
Ausgabe: Die Summe ist ...
Ausgabe: Vielen Dank!!
Struktogramm:
Arithmetische Operatoren
15
Operator Rangfolge Beispiel Operation
+ 2 +a Wert des Operanden wird nicht verändert
- 2 -a Wert des Operanden wird negiert
+ 5 a + b Addition
- 5 a – b Subtraktion
* 4 a * b Multiplikation
/ 4 a / b Division
% 4 a % b Modulo (Restbestimmung)
= 15 a = b Zuweisung
( ) 1 (a+b)*c Klammersetzung
Arithmetische Operatoren dienen der Durchführung grundlegender Rechenoperationen.
Vergleichsoperatoren
16
Operator Bedeutung Rangfolge Beispiel
< kleiner als 7 a < b
<= kleiner oder gleich 7 a <= b
> größer als 7 a > b
>= größer oder gleich 7 a >= b
== gleich 8 a == b
!= ungleich / verschieden von 8 a != b
Vergleichsoperatoren werden benötigt, um Bedingungen zu formulieren.
Logische Operatoren
17
Operator Bedeutung Rangfolge Beispiel
! Negation 2 !a
&& logisches UND 12 a && b
|| logisches ODER 13 a || b
& bitweises UND 9 a & b
| bitweises ODER 11 a | b
^ bitweises XOR 10 a ^ b
<< bitweises Linksschieben 6 a << b
>> bitweises Rechtsschieben 6 a >> b
~ Einerkomplement 2 ~a
Sollen mehrere Bedingungen berücksichtigt werden, so können diese durch logische Operatoren miteinander kombiniert werden.
if-else
18
Befehl „Verzweigungen mit if-else“:if (Ausdruck) z. B. a<b
Anweisung;else
Anweisung;
Struktogramm:
Befehl „Verzweigungen mit if-else“:if (Ausdruck) z. B. a<b
Anweisung;else
Anweisung;
Struktogramm:
Anweisung1 Anweisung2
if (Ausdruck) true false
Taschenrechner
19
Taschenrechner
Ausgabe Allgemeine Infos
Ausgabe: beliebige Taste zum Starten
Ausgabe: Rechenoperation eingeben (z. B. 3 * 7)
Eingabe: Zahl1, Operand, Zahl2
Operand ='+'ja nein
Ausgabe: Summe
Operand ='-'ja nein
Ausgabe: Differenz
Operand ='*'ja nein
Ausgabe:Produkt
Operand ='/'ja nein
Ausgabe:Teilung
Ausgabe: FalscheOperation
...
Schleifen I – Übersicht
20
Schleifentypen
geschlossene Schleifen offene Schleifen
kopfgesteuert fußgesteuert
Der Programmierer weiß bereits beim
Programmieren wie oft die Schleife durchlaufen
werden soll.
Wie oft die Schleife durchlaufen wird, ist nicht
zahlenmäßig festgelegt, sondern hängt z. B. von Benutzereingaben ab.
Schleifen II – geschlossene Schleife
21
C++ - Quellcodeshort main( )
{
short max_zahl, z;
cout << “Wie weit soll ich zaehlen?“;
cin >> max_zahl;
for (z = 1; z <= max_zahl; z++)
{
cout << “z = “ << z << endl;
}
cout << “Schleife beendet, z= “ << z;
getch();
return 0;
} //Ende von main
Struktogramm
Start
Variablen: short max_zahl, z
Ausgabe: "Wie weit soll ich zählen? "
Eingabe: max_zahl
für z = 1 bis max_zahl
Ausgabe: "z =" z
Ausgabe: "Schleife beendet, z = " z
getch()
Ende
Schleifen III – kopfgesteuerte offene Schleife
22
C++ - Quellcodeshort main( )
{
short zahl = 0, i = 1;
cout << “Bitte eine Zahl eingeben: “;
cin >> zahl;
while(zahl < 100) //Schleifenkopf mit
{ //Bedingung
zahl = zahl + 1;
cout << i << “. Schleifendurchlauf “;
cout << “zahl “ << zahl << endl;
i++;
} //Schleifenfuß ohne Bedingung
cout << “Schleife beendet, zahl= “ << zahl;
getch();
} //Ende von main
Struktogramm
Start
Variablen: short zahl=0, i=1
Ausgabe: "Bitte eine Zahl eingeben: "
Eingabe: zahl
Solange (zahl < 100)
zahl = zahl + 1
Ausgabe: i ". Schleifendurchlauf"
Ausgabe: "zahl = " zahl
i = i + 1
Ausgabe: "Schleife beendet, zahl = " zahl
getch()
Ende
Struktogramm
Start
Variablen: short zahl=0, i=1
Ausgabe: "Bitte eine Zahl eingeben: "
Eingabe: zahl
Solange (zahl < 100)
zahl = zahl + 1
Ausgabe: i ". Schleifendurchlauf"
Ausgabe: "zahl = " zahl
i = i + 1
Ausgabe: "Schleife beendet, zahl = " zahl
getch()
Ende
Schleifen IV – fußgesteuerte offene Schleife
23
C++ - Quellcodeshort main( )
{
short zahl = 0, i = 1;
cout << “Bitte eine Zahl eingeben: “;
cin >> zahl;
do //Schleifenkopf ohne Bedingung
{
zahl = zahl + 1;
cout << i << “. Schleifendurchlauf “;
cout << “zahl “ << zahl << endl;
i++;
} while(zahl < 100); //Schleifenfuß mit Bed.
cout << “Schleife beendet, zahl= “ << zahl;
getch();
} //Ende von main
Präprozessor, Compiler und Linker
24
Mit Hilfe des include-Befehls werden sogenannte Header-Dateieneingefügt. Der Präprozessor (Übersetzungsprogramm) kopiert dieHeader-Datei in den Quellcode hinein (vor der Compilierung). In ihr stehen Informationen zur Syntax von Befehlen, so das der CompilerFehler erkennen kann. Neben den Quelltextergänzungen entfernt der Präprozessor auch alle Kommentare, Leerzeilen und Leerzeichen aus dem Quellcode. Der Compiler übersetzt dann den Quellcode in maschinenlesbaren Objektcode (.obj Datei). Syntaktische Fehler im Programm werdenvom Compiler angezeigt und müssen korrigiert werden.Dem Linker obliegt jetzt die Aufgabe, diese Objektcode-Dateien sowie den Objektcode der benutzten Bibliotheksfunktionen (.lib ) in eine Programmdatei (.exe unter Windows) zusammenzubinden.
Namensbereiche
25
Um Namenskonflikte bei globalen Bezeichnern auszuschalten , siehtC++ die Bildung von Namensbereichen vor. Innerhalb eines Namens-bereichs können Bezeichner verwendet werden, ohne Rücksicht darauf, ob sie bereits außerhalb definiert wurden. Mit Hilfe des Schlüsselwortes namespace kann der Programmierersomit den globalen Gültigkeitsbereich in Unterbereiche aufteilen.
Bibliothek
26
Mit Bibliothek bezeichnet man in Programmiersprachen eine Sammlungvon Funktionen und Konstanten, die nicht zu einem Programm selbst gehört, sondern diesem und zumeist auch anderen Funktionen und Konstanten zur Verfügung stellt. In der Regel sind Bibliotheken für einenbreiten Einsatz konzipiert und sollten daher möglichst flexible Funktionen
enthalten und vor allem gut dokumentierte Schnittstellen anbieten. Bei jedem C++-Compiler sollten die C++-Standardbibliotheken vorhanden sein, die z.B. einige abstrakte Datenstrukturen wie Listen u.ä. implemen-tieren. Zusätzlich gibt es oft Bibliotheken, die den Zugriff auf Hardware, graphische Oberfläche oder andere Teile einer Plattform wesentlich vereinfachen. Bibliotheken werden i.d.R. in schon compilierter Form genutzt, sie werden selten mit einem Projekt compiliert und häufig liegt der Quelltext auch gar nicht vor (Urheberschutz).
Definition, Deklaration und Initialisierung
27
Variablen dürfen in einem Programm außerhalb oder innerhalb vonFunktionen definiert werden. Der Unterschied ist folgender:Eine außerhalb jeder Funktion definierte Variable ist global, d. h. in allen Funktionen verwendbar.Eine innerhalb einer Funktion definierte Variable ist lokal, d. h. nur in derselben Funktion verwendbar.
Lokale Variablen werden normalerweise unmittelbar hinter einer sich öffnenden Klammer – am Beginn einer Funktion – definiert.Sie können aber überall dort stehen, wo eine Anweisung erlaubt ist.
Definition, Deklaration und Initialisierung
28
...float zahl, a; //Definition und Deklaration globaler Variablen
int main (){
int i; //Definition und Deklaration lokaler Variablen
short c = 0; //Definition, Deklaration und Initialisierung einer //lokalen Variablen
i = 100; // Initialisierung von i...
}
Initialisierung bedeutet einer Variablen eine Startwert zu geben. Wird es nicht gemacht, so steht bei einer lokalen Variablen irgendein Wert. (z. B. c = c +1 (Zähler) wird c nicht initialisiert so stehtnachdem ersten Durchlauf keine 1 in c.)
Zahlenraten
29
Programmieren Sie folgende Aufgabenstellung: PC soll eine Zahl zwischen 1 und 100 erraten
Vorgehensweise:1. User soll sich eine Zahl zwischen 1 und 100 merken2. PC gibt eine Zahl aus und fragt den User...3. Wenn die Zahl nicht erraten wurde gibt der PC eine weitere Zahl
aus und fragt wieder...4. Vielen Dank für das Spiel5. Möchten Sie ein weiteres Spiel?6. (Ergänzungen: Programm gibt die Anzahl der Versuche aus und
Programm merkt ob der User schummelt)
Erstellen Sie als erstes ein Struktogramm mit allen wichtigen „Befehlen“ (Variablendefinitionen, -deklarationen, -initialisierungen, mathematische Operationen usw. )
Zeiger I#include <iostream.h>
void main(void){ int zahl; // Integer Variable int* pZeigerAufZahl; // Zeiger auf Integer-Variable
pZeigerAufZahl = &zahl; zahl = 5;
cout << zahl; cout << pZeigerAufZahl; cout << *pZeigerAufZahl;
zahl = 10; cout << zahl; cout << pZeigerAufZahl; cout << *pZeigerAufZahl;
*pZeigerAufZahl = 20; cout << zahl; cout << pZeigerAufZahl; cout << *pZeigerAufZahl;
cout << &pZeigerAufZahl;
}
BildschirmausgabeBildschirmausgabe50x4cc723e85
100x4cc723e8 10
200x4cc723e8 20
0x4cc723e4
Adressoperator
Dereferenzierungs-operator
30
Zeiger II#include <iostream.h>
void main(void){ int zahl; int* pZeigerAufZahl;
pZeigerAufZahl = &zahl; zahl = 5;
cout << zahl; cout << pZeigerAufZahl; cout << *pZeigerAufZahl;
zahl = 10; cout << zahl; cout << pZeigerAufZahl; cout << *pZeigerAufZahl;
*pZeigerAufZahl = 20; cout << zahl; cout << pZeigerAufZahl; cout << *pZeigerAufZahl;
cout << &pZeigerAufZahl;
}
zahl pZeigerAufZahlAdresse
0x4cc723e8Inhalt
?Adresse
0x4cc723e4Inhalt
?
Speicherinhalte
Adresse0x4cc723e8
Inhalt5
Adresse0x4cc723e4
Inhalt0x4cc723e8
Adresse0x4cc723e8
Inhalt10
Adresse0x4cc723e4
Inhalt0x4cc723e8
Adresse0x4cc723e8
Inhalt20
Adresse0x4cc723e4
Inhalt0x4cc723e8
31
Operatoren – Grundsätzliches
32
In C/C++ stehen u. a. folgende Gruppen von Operatoren zur Verfügung
• arithmetische Operatoren für die grundlegenden Rechenoperationen
• Vergleichsoperatoren zur Formulierung von Bedingungen
• logische Operatoren zur Verknüpfung von Einzelbedingungen zu einer komplexen Bedingung
• Zuweisungsoperatoren
• Postfix – Operatoren
• Zeiger – Operatoren
• diverse Kategorien
Hinweis:Ähnlich der Regel „Punktrechnung vor Strichrechnung“ in der Mathematik, gibt es in C/C++ eine feste Reihenfolge bei Auswertung der einzelnen Operatoren in komplexeren Ausdrücken. Insgesamt gibt es in C/C++ 16 Prioritätsstufen (Rangfolge 1: höchste Priorität, Rangfolge 16: niedrigste Priorität).Bei Zweifeln hinsichtlich der Prioritäten der Operatoren ist es ratsam, zusätzliche Klammern zu setzen.