Weihnachtsvorlesung

Alexander Krause

🚀 by Decker

Testfrage

GlĂŒhwein mit oder ohne Alkohol?

  • Mit
  • Ohne

Quiz 1

Frage

Ist eine Variable vom Typ int immer 4 Byte (32bit) groß?

  • Ja
  • Nein

ErlÀuterung

Die genaue GrĂ¶ĂŸe eines Integers hĂ€ngt von der Wortbreite der Prozessorarchitektur ab.

Quiz 2

Frage

In welchem BinÀrformat werden vorzeichenbehaftete, integrale Zahlen im Computer abgelegt?

  • Einerkomplement
  • Fließkommadarstellung
  • Zweierkomplement
  • Einfache BinĂ€rdarstellung

Quiz 3

Was ist eine gĂŒltige Variablen initialisierung?

  • int a[42]
  • int a{4711}
  • int a"2"

Quiz 4

Frage

Welches sind gĂŒltiger Bezeichner fĂŒr Variablen?

  • geht_so!
  • cr7
  • Tach
  • double

ErlÀuterung

B und C

Siehe Kapitel 2, Folien zum Thema Bezeichner.

Erlaubte Zeichen: a-z, A-Z, 0-9 und _

Quiz 5

Welches ist kein SchlĂŒsselwort?

  • char
  • case
  • if
  • notif

Quiz 6

Wie lautet das Ergebnis von 4712 % 1200?

  • 1112

Quiz 7

Welchen Wert hat die Variable b?

unsigned int a = 4294967296;
unsigned int b = a + 3;
  • 3

Quiz 7 – ErlĂ€uterung

  • Variable a ist bereits grĂ¶ĂŸer als der maximale Wert eines vorzeichenlosen Integers
  • Jeder weitere Addition um 1 fĂŒhrt zu weiterem Überlauf in der BinĂ€rdarstellung
  • Maximaler Wert eines Integers mit 32bit:
  •     4294967295=232−1= b 0 11111111 11111111 11111111 11111111
  • a: 4294967296=232+0= b 1 00000000 00000000 00000000 00000000
  • b: 4294967296=232+3= b 1 00000000 00000000 00000000 00000011

Quiz 8

Welchen Wert hat die Variable b?

int a = 2147483648;
int b = a + 1;
  • -2147483647

Quiz 8 – ErlĂ€uterung 1

  • Variable a ist bereits grĂ¶ĂŸer als der maximale Wert eines vorzeichenbehafteten Integers
  • Jeder weitere Addition um 1 fĂŒhrt zu weiterem Überlauf in der BinĂ€rdarstellung
  • Max: 2147483647=231−1= b 01111111 11111111 11111111 11111111
  • Konvertierung des Zweikomplements
    • Verzeichenbit merken
    • 1 subtrahieren
    • alles invertieren
    • in Dezimal umwandeln

Quiz 8 – ErlĂ€uterung 2

  • 2147483647+0= b 01111111 11111111 11111111 11111111
  • 2147483647+1= b 10000000 00000000 00000000 00000000
  • Umrechnen
    • b 10000000 00000000 00000000 00000000 → MSB ist 1 → negative Zahl
    • b 01111111 11111111 11111111 11111111
    • b 10000000 00000000 00000000 00000000 → 2147483648
    • Vorzeichenbit berĂŒcksichtigen → -2147483648
  • −2147483648+1=−2147483647

Quiz 9

Lassen sich mit den Fließkommadatentypen (float / double) jede beliebige Zahl exakt darstellen?

  • Ja
  • Nein

Quiz 10

Frage

Ist dies standardkonformer C++-Code?

void test(int n) {
    int arr[n];

    /* ... */
}
  • Ja
  • Nein

ErlÀuterung

  • GemĂ€ĂŸ Standard sind Arrays variabler GrĂ¶ĂŸe nicht zulĂ€ssig.

Quiz 11

Welcher Wert wird ausgegeben?

int main() {
    int arr[] = {42, 42, 21};

    cout << "Arraywert: " << arr[3] << endl;

    return 0;
}
  • undefiniert
  • 42
  • 21
  • Es erscheint ein grĂŒner Hase

Quiz 11 – Live-Code

#include <iostream>

using namespace std;

int main() {
    int arr[] = {42, 42, 21};

    cout << "Arraywert: " << arr[3] << endl;

    return 0;
}
cpp

Quiz 12

Frage

Wie viele Bytes belegt das Array wort?

char wort[] = "Hallo EidP!";
  • 12

ErlÀuterung

  • Der String enthĂ€lt 11 Zeichen → 11 Bytes
  • Plus 1 Byte fĂŒr die Null-Terminierung (`‘\0’®)

Quiz 13

Welche Werte haben die Variablen lauf und foo hinter der der Schleife?

int lauf = 0, foo = 0;

do {
    if (lauf % 2 == 0) {
        if (foo) {
            foo += 3;
        } else {
            foo = 3;
        }
    }
    if (foo % 9 == 0) {
        break;
    }
    lauf++;
} while (lauf);
  • 4

  • 9

Quiz 13 – Live-Code

#include <iostream>

using namespace std;

int main() {
    int lauf = 0, foo = 0;

    do {
        if (lauf % 2 == 0) {
            if (foo) {
                foo += 3;
            } else {
                foo = 3;
            }
        }
        if (foo % 9 == 0) {
            break;
        }
        lauf++;
    } while (lauf);
    cout << "lauf = " << lauf << ", foo = " << foo << endl;

    return 0;
}
cpp

Quiz 14

Wie sieht die dritte Zeile der Ausgabe aus?

for (int i = 0; i < 100; i++) {
    if (i % 5 != 0) {
        continue;
    }
    cout << i << ": ";
    for (int k = 3; k > 0; k--) {
        cout << k << " ";
    }
    cout << endl;
}
  • 15: 3 2 1 0

Quiz 14 – Live-Code

#include <iostream>

using namespace std;

int main() {
    for (int i = 0; i < 100; i++) {
        if (i % 5 != 0) {
            continue;
        }
        cout << i << ": ";
        for (int k = 3; k > 0; k--) {
            cout << k << " ";
        }
        cout << endl;
    }

    return 0;
}
cpp

Quiz 15

Was gibt das folgende Programm aus?

char quelle[] = "Qivv} \\-Qew";
char ziel[12] = { 0 };

int i = 0;
for (char *c = quelle; *c != '\0'; c++, i++) {
        if (*c == ' ' || *c == '-') {
            ziel[i] = *c;
            continue;
        }
        ziel[i] = *c - 4;
}
cout << ziel << endl;
  • Merry X-Mas

Quiz 15 – Live-Code

#include <iostream>

using namespace std;

int main() {
    char quelle[] = "Qivv} \\-Qew";
    char ziel[12] = { 0 };

    int i = 0;
    for (char *c = quelle; *c != '\0'; c++, i++) {
            if (*c == ' ' || *c == '-') {
                ziel[i] = *c;
                continue;
            }
            ziel[i] = *c - 4;
    }
    cout << ziel << endl;

    return 0;
}
cpp

Quiz 16

Frage

HĂ€ngt die GrĂ¶ĂŸe eines Zeigers von dem Datentyp / der Datenstruktur ab, auf die er zeigt?

  • Ja
  • Nein

ErlÀuterung

Er hÀngt nur von der Wortbreite der Prozessorarchitektur ab.

Quiz 17

Wie groß ist der Zeiger p auf einer 32bit-Architektur?

char *p;
  • 4 Bytes
  • 8 Bytes
  • 2 Bytes
  • 16 Bytes

Quiz 18

Worauf zeigen die Zeiger p1 und p2 am Ende des Programms?

int a = 42;
int arr[] = { 4, 3, 2, 1};

int *p1 = &a, *p2 = arr + 3;

*p1 = 3;
arr[3] = 4711;
p1 = p2;
arr[1] = -1;
p2 -= 2;
*p2 = 1;
  • a
  • arr[0]
  • arr[1]
  • arr[2]
  • arr[3]

  • a
  • arr[0]
  • arr[1]
  • arr[2]
  • arr[3]

Quiz 18 – Live-Code

#include <iostream>

using namespace std;

int main() {
    int a = 42;
    int arr[] = { 4, 3, 2, 1};

    int *p1 = &a, *p2 = arr + 3;

    *p1 = 3;
    arr[3] = 4711;
    p1 = p2;
    arr[1] = -1;
    p2 -= 2;
    *p2 = 1;

    cout << hex << showbase;
    cout << "&a  = " << &a;
    cout << ", arr = " << arr << endl;
    cout << "p1  = " << p1 << endl;
    cout << "p2  = " << p2 << endl;

    return 0;
}
cpp

Die Differenz zwischen p1 und arr ist 3 x 4 = 0xc
Die Differenz zwischen p2 und arr ist 1 x 4 = 0x4

Quiz 19

Was ist die Ausgabe des Programms?

const int n = 10, m = n / 2;
int *x = new int[n];
int *y = x + m;

for (int i = 0; i < m; i++) {
    x[i] = i;
    y[i] = (m - i);
}

for (int i = 0; i < n; i++) {
    cout << x[i] << ",";
}
cout << endl;
  • 0,1,2,3,4,5,4,3,2,1,

Quiz 19 – Live-Code

#include <iostream>

using namespace std;

int main() {
    const int n = 10, m = n / 2;
    int *x = new int[n];
    int *y = x + m;

    for (int i = 0; i < m; i++) {
        x[i] = i;
        y[i] = (m - i);
    }

    for (int i = 0; i < n; i++) {
        cout << x[i] << ",";
    }
    cout << endl;

    return 0;
}
cpp

Quiz 20

In welchen Speicherbereichen liegen die Variablen?

int x = 2, y;

int main() {
    int *p = new int[42];

    return 0;
}
  • x
    • Datensegment
  • p
    • Stack
  • *p
    • Heap
  • y
    • Datensegment

Quiz 21

Was ist die Ausgabe des Programms?

int a[10];

for (int i = 0; i < 10; i++) {
    a[i] = i + i;
}

int sum = 0;
for (int i = 0; i < 20; i++) {
    sum = a[i];
}
cout << "sum = " << sum << endl;
  • 18
  • 20
  • Undefiniertes Verhalten
  • Das Programm stĂŒrzt ab.

Quiz 21 – Live-Code

#include <iostream>

using namespace std;

int main() {
    int a[10];

    for (int i = 0; i < 10; i++) {
        a[i] = i + i;
    }

    int sum = 0;
    for (int i = 0; i < 20; i++) {
        sum = a[i];
    }
    cout << "sum = " << sum << endl;

    return 0;
}
cpp

Quiz 22

Was ist die Ausgabe des Programms?

static int sum(int *x, int n) {
    int ret = 0;
    for (int i = 0; i < n; i++) {
        ret += x[i];
        x[i] = 1;
    }
    return ret;
}

int main() {
    int a[] = { 10, 5, 3, 2, 1};

    cout << "sum = " << sum(a, 5) << ", sum = " << sum(a, 5) << endl;
    
    return 0;
}
  • sum = 21, sum = 5
  • sum = 21, sum = 21
  • Undefiniertes Verhalten
  • Das Programm stĂŒrzt ab.

Quiz 22 – Live-Code

#include <iostream>

using namespace std;

static int sum(int *x, int n) {
    int ret = 0;
    for (int i = 0; i < n; i++) {
        ret += x[i];
        x[i] = 1;
    }
    return ret;
}

int main() {
    int a[] = { 10, 5, 3, 2, 1};

    cout << "sum = " << sum(a, 5) << ", sum = " << sum(a, 5) << endl;
    
    return 0;
}
cpp

Quiz 23

Was ist die Ausgabe des Programms?

struct Rectangle {
    int x, y;
    int width, height;
};

static Rectangle* newRectangle(void) {
    Rectangle rect{0,0, 10, 20};

    return &rect;
}

int main() {
    Rectangle *rect = newRectangle();    
    cout << "width = " << rect->width << ", height = " << rect->height << endl;

    return 0;
}
  • width = 10, height = 20
  • Undefiniertes Verhalten
  • Das Programm stĂŒrzt ab.

Quiz 23 – Live-Code

#include <iostream>

using namespace std;

struct Rectangle {
    int x, y;
    int width, height;
};

static Rectangle* newRectangle(void) {
    Rectangle rect{0,0, 10, 20};

    return &rect;
}

int main() {
    cout << "Start" << endl;
    Rectangle *rect = newRectangle();    
    cout << "width = " << rect->width << ", height = " << rect->height << endl;

    return 0;
}
cpp

Quiz 24

Was ist die Ausgabe des Programms?

static int cnt = 0;

static int fak(int n) {
    static int cnt = 0;
    if (n == 0) {
        cnt++;
        return 1;
    }
    ::cnt++;
    return n * fak(n - 1);
}

int main() {
    cout << "fak(5) = " << fak(5);
    cout << ", cnt = " << cnt << endl;
    
    return 0;
}
  • fak(5) = 120, cnt = 5
  • Undefiniertes Verhalten
  • Das Programm stĂŒrzt ab.

Quiz 24 – Live-Code

#include <iostream>

using namespace std;

static int cnt = 0;

static int fak(int n) {
    static int cnt = 0;
    if (n == 0) {
        cnt++;
        return 1;
    }
    ::cnt++;
    return n * fak(n - 1);
}

int main() {
    cout << "fak(5) = " << fak(5);
    cout << ", cnt = " << cnt << endl;

    return 0;
}
cpp

Quiz 25

Was passiert bei dem Aufruf von fak(10000)?

  • Die FakultĂ€t von 10000 wird ausgegeben.
  • Undefiniertes Verhalten
  • Das Programm stĂŒrzt ab.

Quiz 26

Was ist die Ausgabe des Programms?

#define FOO 42

int main() {
    cout << "Hallo, ";
#ifndef FOO
    cout << "Max";
#else
    cout << "Ben";
#endif
    cout << "! Ich bin " << FOO << "." << endl;

    return 0;
}
  • Hallo, Ben! Ich bin 42.

Quiz 26 – Live-Code

#include <iostream>

using namespace std;

#define FOO 42

int main() {
    cout << "Hallo, ";
#ifndef FOO
    cout << "Max";
#else
    cout << "Ben";
#endif
    cout << "! Ich bin " << FOO << "." << endl;



    return 0;
}
cpp

Quiz 27

Wie lautet die Abfolge der Zahlen bei einem preorder-Durchlauf durch folgenden binÀren Suchbaum?

weihnachten-deck-code-a13ee5a4.dot.svg
  • 42,30,10,38,5049,63

Quiz 28

Was fĂŒr eine Datenstruktur wird hier dargestellt?

weihnachten-deck-code-06e99ca2.dot.svg
  • BinĂ€rer Baum
  • BinĂ€rer Suchbaum
  • Graph

Quiz 29

Wie greift man auf die Methode einer Oberklasse zu?

Beispiel: Methode setCurrent() der Oberklasse Resistor

  • Resistor->setCurrent()
  • Resistor.setCurrent()
  • Resistor::setCurrent()
  • Resistor:setCurrent()

Quiz 30

Welche Folgen hat die private Ableitung von einer Basisklasse fĂŒr weitere Unterklassen dieser Klasse?

Beispiel:

  • public Foo : private Bar {
  • public Lol : public Foo {
  • Keine. Klasse Lol darf alles
  • Klasse Bar ist gar nicht sichtbar
  • Alle Attribute und Methoden sind protected

🎄 🎅 Weihnachten und Silvester 2024 🎇 🎊

🎆 Alles Gute und einen guten Rutsch! Bis 2025! 🎆

Logo
Weihnachtsvorlesung