Informatik W06
Levin Ceglie
Outline
- Nachbesprechung Serie 3/4
- Debugging mit
assert - Funktionen
- Stepwise Refinement
- Alte Prüfungsaufgaben
gotoundswitch
Nachbesprechung Serie 3
- Viele haben bis geprüft. Es reicht jedoch sogar . Angenommen teilt , so existiert also ein mit , es folgt also und . Also existiert ein Teiler .
- Saubere Indentierung/Formatierung!
- Kommentare
//single line/* */mutliline.
Debugging mit assert
- Exit Codes sind nun unter C++ Guides beschrieben.
Code Example (Debugging with Assert)
Wann und wo sind asserts sinnvoll?
- In langen Programmen, um einen besseren Überblick zu haben.
- Um falsche (Benutzer-)Eingaben sofort zu erkennen und späteres undefiniertes Verhalten zu vermeiden.
- Als zusätzliche Form der Dokumentation, wenn mehrere Programmierer an demselben Code arbeiten.
Funktionen
Aufgaben (Slides)
Aufgabe (Decimal to arbitrary base)
Hinweis: Versucht euch zuerst einen Algorithmus für eine spezifische Basis zu überlegen und verallgemeintert diesen dann.
Stepwise Refinement
Aufgabe (Perfect Numbers)
Fragen?.
Prüfungsaufgaben
Aufgaben (Slides)
Goto, Swtich
In C++ sind goto und switch Anweisungen Teil der Kontrollflussanweisungen, die verwendet werden, um den Ablauf eines Programms zu steuern.
goto
Die goto Anweisung ist eine Sprunganweisung, die es ermöglicht, den Programmfluss an eine bestimmte Stelle im Code zu versetzen.
Beispiel:
int main(){
int i = 0;
start:
i++;
if (i < 5) goto start; // Springe zurück zur 'start'-Marke solange i < 5 ist.
return 0;
}Beachte jedoch, dass vom Gebrauch von goto statements generell abgeraten wird, da diese den Code unleserlich machen. Denn genau wie der Compiler dann von Zeile zu Zeile Springen muss, muss man selbst beim Studieren so eines Programmes immer herumspringen, was das lesen mühsam macht.
switch
Die switch Anweisung ermöglicht es, verschiedene Aktionen basierend auf dem Wert einer Variable auszuführen.
Beispiel:
#include<iostream>
int main(){
int day = 3;
switch(day) {
case 1:
std::cout << "Montag";
break;
case 2:
std::cout << "Dienstag";
break;
// ...
default:
std::cout << "Ungültiger Tag";
}
return 0;
}Beachte die break statements. Wenn man bei einem case das break weglassen würde, so würde ein sogenannter Fall-through stattfinden und der nächste case würde auch noch ausgeführt werden. Falls wir, zum Beispiel, nach std::cout << "Montag"; das break weglassen würden und day==1, so würde “Montag” und “Dienstag” ausgegeben werden.
Für die meisten Anwendungen gibt es keinen wesentlichen Unterschied zwischen einem switch statement und if-else conditions. In speziellen Fällen, zum Beispiel wenn man zwischen 10 Fällen unterscheiden möchte kann es sein, dass das switch statement schneller ist, da es im Hintergrund als sogenanntes “jump table” implementiert.