Aufgabe 1
a) Installieren Sie eine C++ fähige IDE (wie Netbeans mit MinGW/msys oder Cygwin, Tutorien und Installationshilfen sind online verfügbar, z.B. das Configuring the NetBeans IDE Tutorium).
- Cygwin:
- Cygwin SetUp starten
- Install from Internet auswählen.
- Einen beliebigen Pfad geben (standard Pfad empfohlen) und mit weiter bestätigen.
- Mit weiter bestätigen
- Direct Connection auswählen und mit weiter bestätigen.
- Ein Mirror auswählen, am besten einen aus Ihrer Nähe, von welchem die Dateien herunterladen werden sollen.
- Nun sollte ein Fenster mit dem Namen Select Packages kommen.
- Nun klickt bei dem Unterpunkt Devel auf install, alles andere bei Default lassen.(Ihr lädt euch dann auch Pakete runter, die Ihr eventuell nicht braucht, dafür könnt ihr aber Nichts falsch machen).
- Mit weiter bestätigen.
- Einen Kaffee holen und abwarten, bis alle Pakete runtergeladen und installiert wurden.
- NetBeans IDE:
- Installiert NetBeans IDE wie gewohnt unter Windows, indem Ihr die heruntergeladene Datei ausführt und auf weiter klickt.
- NetBeans IDE starten.
- Oben im Menü Tools auswählen und auf Options klicken.
- Im neu erschienenen Fenster C/C++ auswählen.
- Unter Tools Collection: den Button Add betätigen.
- Im neuen Fenster unter Base Directory den Pfad zu dem bin Unterverzeichnis im Verzeichnis Cygwin auswählen. z.B. C:\cygwin\bin.
- Alles andere erledigt NetBeans IDE für euch, bestätigt dann mit OK.
- Nun sollten alle Pfade zu den Werkzeugen (z.B. C++ Compiler) eingetragen worden sein.
- Bestätigt mit OK.
- Umgebungsvariable PATH Setzen:
- Links unten auf Start-Button klicken.
- Rechtsklick auf Computer.
- Eigenschaften auswählen.
- Erweiterte Systemeinstellungen auswählen.
- Den Reiter Erweitert auswählen.
- Unten auf Umgebungsvariablen klicken.
- PATH Variable auswählen und auf bearbeiten klicken.
- Zu dem Wert der Variable folgendes hinzufügen ;C:\cygwin\bin (Falls cygwin\bin in diesem Pfad liegt, ansonsten müsst Ihr den einfügen, in welchem sich cygwin\bin befindet)
- Dann könnte eure PATH-Variable so aussehen C:\Program Files (x86)\OpenVPN\bin;C:\cygwin\bin
- Mit OK bestätigen
b) Machen Sie sich mit Ihrer IDE vertraut (bei Netbeans: machen Sie die Tour, und dann im C/C++ Learning Application Trail die Tutorien Getting Started, C/C++ Projects Quick Start, und Defining your C/C++ Project’s Development Environment)
Aufgabe 2
a) Geben Sie das Hallo C++ Programm aus der Vorlesung in Ihrer IDE ein und bringen Sie es zur Ausführung.
/*
Hallo C++
v0.1 17102011-tlo
Gibt Hallo C++! auf der Konsole aus
*/
#include // Präprozessor-Direktive für die I/O-Streams
// aus der C++ Standardbibliothek (StdLib)
using namespace std; // Setze Namensbereich der StdLib als Default
//----------------------------------------------------------------
int main( ) // Alle C++ Programme starten bei int main( )
{
cout << "Hallo C++!\n"; // Ausgabe mit << auf den cout Stream der StdLib
return 0; // return Anweisung, 0 kennzeichnet erfolgreiches Ende
}
b) Kopieren Sie jede der drei fehlerhaften Hallo C++ Programmversionen aus der Vorlesung in die IDE („copy-pasten“) und versuchen Sie, diese zur Ausführung zu bringen. Beobachten Sie, wie die IDE reagiert, identifizieren und beheben Sie jeweils die Fehler anhand der Fehlermeldungen der IDE. Denken Sie sich mindestens fünf weitere Fehler aus, die beim Eintippen des Programms hätten passieren können, geben Sie diese ein und sehen Sie sich an, wie die IDE damit umgeht.
// #include vergessen
int Main( )
{
std::cout << 'Hallo C++!\n'; // Strings mit " xyz " verwenden
Return 0; // muss return 0; heißen
}
include // muss #include heißen
int main( )
{
std::cout << "Hallo C++!\n" // abschließendes ; vergessen
return o; // muss return 0; heißen
}
// int main() vergessen
#include // muss heißen
using namespace std // abschließendes ; vergessen
int main( )
{
cout < "Hallo C++!\n; // schließendes " vergessen und << für Ausgabestrom
return 0;
// schließendes } vergessen
Mögliche Fehler:
- << für Eingabe verwenden >> für Ausgabe verwenden
- Befehle mit , beenden
- Variablen mit falschen Typen deklarieren
- Block mit { abschließen
c) Ändern Sie das Hallo C++ Programm, so dass es die folgenden Zeilen ausgibt:
Umlaut: ä ö ü Ä Ö Ü
sz-Ligatur: ß
Trema: ë ï
Roy sagt "Schön ist es, auf der Welt zu sein,
wenn die Sonne scheint für Groß und Klein".
Oberflächlich
#include
using namespace std;
//------------------------------------------------------------------------------
int main( )
{
cout << "Umlaut: \x00E4 \x00F6 \x00FC \x00C4 \x00D6 \x00DC\n";
cout << "sz-Ligatur: \x00DF\n";
cout << "Trema: \x00EB \x00EF\n";
cout << "Roy sagt \x0022Sch\x00F6n ist es, auf der Welt zu sein,\n";
cout << "wenn die Sonne scheint f\x00FCr Gro\x00DF und Klein\x0022\n";
cout << "Oberfl\x00E4chlich\n";
return 0;
}
Hinweis: Stellen Sie die Umlaute im Quellcode als Sonderzeichen dar. Ermitteln Sie dazu die hexadezimalen Werte der Sonderzeichen in Ihrer Umgebung (am „command prompt“ in Windows z.B. die „Codepage 850“). Welchen zusätzlichen Kniff benötigen Sie bei der Ausgabe des Sonderzeichens in dem Wort Oberflächlich, und warum?
Aufgabe 3
a) Schreiben Sie ein Programm, das den Benutzer auffordert, drei ganze Zahlen einzugeben, die Sie in int-Variablen namens ix, iy und iz speichern. Ihr Programm soll die drei Zahlen nun in aufsteigender Reihenfolge ausgeben (also bei Eingabe von 27, 5 und 67 soll 5, 27, 67 ausgegeben werden).
#include // Einbinden der I/O-Streams aus der StdLib
using namespace std; // Standardmäßige Verwendung des Namensraumes std für Befehle
int main ()
{
int ix=0, iy=0, iz=0; int minimal=0, mittel=0, maximal=0, hilfe=0;
cout << "Bitte geben Sie drei ganzzahlige Werte ein."; cin >> ix >> iy >> iz;
minimal = ix;
mittel = iy;
maximal = iz;
if (minimal > mittel )
{
hilfe = minimal;
minimal = mittel;
mittel = hilfe;
}
if (mittel > maximal)
{
hilfe = mittel;
mittel = maximal;
maximal = hilfe;
if (minimal > mittel )
{
hilfe = minimal;
minimal = mittel;
mittel = hilfe;
}
}
cout << minimal << ", " << mittel << ", " << maximal << "\n";
return 0;
}
b) Erweitern Sie Ihr Programm so, dass die Summe und das Produkt der drei Zahlen, sowie der größte und der kleinste Wert und deren Differenz und Quotient (kleiner 1) berechnen werden, und die Ergebnisse dem Benutzer mitgeteilt werden.
int minimal=0, mittel=0, maximal=0, hilfe=0, summe=0, differenz=0, produkt=0,quotient=0;
summe = minimal+mittel+maximal;
differenz = maximal - minimal;
produkt = minimal * mittel * maximal;
cout << minimal << ", " << mittel << ", " << maximal << "\n";
cout << "Minimal: "<< minimal << "\n";
cout << "Maximal: "<< maximal << "\n";
cout << "Summe: "< cout << "Differenz von groesstem und kleinstem Wert: " << differenz << "\n";
cout << "Produkt aller eingegebenen Werte: "<< produkt << "\n";
if (minimal != 0)
{
quotient = maximal / minimal;
cout << "Ganzzahliger Quotient aus groesstem und kleinstem Wert: "<< quotient << "\n";
}
else
{
cout << "Quotient kann nicht berechnet werden.";
}
Aufgabe 4
a) Geben Sie das Nickname Programm aus der Vorlesung in Ihrer IDE ein und bringen Sie es zur Ausführung.
#include // I/O-Streams aus der StdLib
using std::cin; // using-Deklaration für cin aus std
using std::cout; // using-Deklaration für cout aus std
using std::string; // using-Deklaration für string aus std
//----------------------------------------------------------------
int main( )
{
string nick = "keinname"; // nick ist eine Variable vom Typ string
int yob = "0"; // yob (year of birth) ist eine Variable von Typ int
cout << "Bitte Nickname eingeben (gefolgt von \'Enter\'): "; cin >> nick; // lies die Zeichen in nick ein
cout << "Bitte Geburtsjahr eingeben (gefolgt von \'Enter\'): "; cin >> yob; // lies die Zeichen in yob ein
std::clog << "\n\n\t" << "Nick ist: " << nick << "\n\tYob ist: " << yob << "\n\n";
return 0; // alles OK
}
b) Probieren Sie das Programm aus. Geben Sie auch „unsinnige“ Werte wie ein negatives Geburtsjahr ein. Wie reagiert das Programm? Finden Sie mindestens drei Vorschläge, wie das Programm aus Benutzersicht zu verbessern wäre. Fehler:
- Das Programm akzeptiert jede Eingabe, ob String oder Zahlenwert.
- Es wird nur auf Syntax, nicht auf Semantik überprüft.
Vorschläge:
- Neue Aufforderung für Jahreszahl, falls negative Werte eingegeben wurden
- Neue Aufforderung für Jahreszahl, wenn das Jahr einen Text eingegeben bekommt
- Hinweise auf die zu verwendenden Kriterien bzw. Inhalte geben
c) Modifizieren Sie das Nickname Programm in einer neuen Version entsprechend des folgenden Quellcodefragments:
string nick = "";
string real = "";
int yob = 0;
cout << "Nickname, echten Namen und Geburtsjahr eingeben: ";
cin << nick << real << yob;
clog << "\n\t" << "nick: " << nick;
clog << "\n\t" << "real: " << real;
clog << "\n\t" << "yob: "<< yob;
#include // I/O-Streams aus der StdLib
using std::cin; // using-Deklaration für cin aus std
using std::cout; // using-Deklaration für cout aus std
using std::string; // using-Deklaration für string aus std
using std::clog; // using-Deklaration für clog aus std
//----------------------------------------------------------------
int main( )
{
string nick = ""; // nick ist eine Variable vom Typ string
string real = ""; // real ist eine Variable vom Typ string
int yob = 0; // yob (year of birth) ist eine Variable von Typ int
cout << "Nickname, echten Namen und Geburtsjahr eingeben: \n"; cin >> nick >> real >> yob;
clog << "\n\t" << "Nick: " << nick;
clog << "\n\t" << "Real: " << real;
clog << "\n\t" << "Yob: " << yob;
return 0; // alles OK
}
Probieren Sie die modifizierte Version gründlich aus. Was hat sich verbessert? Was läuft immer noch nicht vernünftig? Wie verhält sich die speziell die Zeile 5? Verbesserung:
- Übersichtlicher Quelltext
- Vorbelegung der Variablen (Initialisierung)
Probleme:
- Nimmt immer noch falsche Werte an
Zeile 5:
- Eingabe mehrerer Werte für mehrere Variablen
- 1:1 Zuweisung nach Reihenfolge
- Wörter dürfen nicht mit Leerzeichen eingegeben werden
d) Programmieren Sie eine weitere Version des Nickname Programms so, dass es Spitzname, Geburtsjahr und Geburtsmonat einliest, und dass es dann das Alter in Jahren zum Semesterbeginn ausgibt. Verwenden Sie für das Alter eine double-Variable und geben Sie es ggf. mit den Nachkommastellen aus. Finden Sie mindestens drei weitere Vorschläge zur Verbesserung Ihres Programms aus Benutzersicht, nachdem Sie es grundsätzlich korrekt zum Laufen gebracht haben.
#include // I/O-Streams aus der StdLib
using std::cin; // using-Deklaration für cin aus std
using std::cout; // using-Deklaration für cout aus std
using std::string; // using-Deklaration für string aus std
using std::clog; // using-Deklaration für clog aus std
//----------------------------------------------------------------
int main( )
{
string nick = ""; // nick ist eine Variable vom Typ string
int yob = 0, mob = 0, yosb = 0, mosb = 0; // Variablen vom Typ int
double alter = 0.0;
cout << "Nickname, Geburtsjahr, Geburtsmonat, Semesterjahr und Semestermonat eingeben: \n"; cin >> nick >> yob >> mob >> yosb >> mosb;
yob = (yob * 12) + mob; // Geburtsjahr in Monate umrechnen und Geburtsmonat addieren
yosb = (yosb * 12) + mosb; // Semesterjahr in Monate umrechnen und Semestermonat addieren
alter = (yosb - yob)/12.0; // Zur Berechnung des Alters yosb minus yob und durch /12 in Jahre umrechnen
clog << "Alter zum Semesterbeginn: " << alter;
return 0; // alles OK
}
Vorschläge:
- Hinweis, dass Monate als Zahl geschrieben werden müssen -> Sonst 0
- Hinweis auf korrekte zu verwendende Datentypen
- Eingabeüberprüfung bzw. Nachfrage und Neueingabe
Aufgabe 5 (optional)
Schreiben Sie ein Programm, das für die Typen bool, char, int, und double den kleinsten und den größten Wert ausgibt, der auf Ihrem System speicherbar ist.
#include // Einbinden der C Standard General Utilities Library aus der StdLib
#include // Einbinden der I/O-Streams aus der StdLib
using namespace std; // Standardmäßig alle Befehle aus der Standardbibliothek verwenden bzw. referenzieren
int main()
{
int int_min=0;
int int_max = 0;
while (int_min {
int_min=int_min-1;
}
cout << "Minimum Integer:" << int_min+1 << "\n"; while (int_max >= 0)
{
int_max=int_max+1;
}
cout << "Maximum Integer:" << int_max-1 << "\n";
}