MINT lernen

Probeklausur

Eine komplette Probe-Klassenarbeit mit 50 Punkten in 45 Minuten, Hilfsmittel: keine — mit Auswertung und Note.

Punkte0 / 50
Note—
Bearbeitet0 / 0
Bearbeitungszeit45 Minuten

Hilfsmittel: keine — auch kein Compiler. Bearbeite alle zehn Aufgaben und klicke dann auf „Auswerten“; danach werden die Lösungen freigeschaltet.

AFB I

Wissen und Reproduzieren

16 Punkte
A1
Ausgaben ablesen
AFB I 4 Punkte
C
printf("%d\n", 23 / 4);
printf("%d\n", 23 % 4);
printf("%.1f\n", 23 / 4.0);
printf("%d\n", (int) 7.9);

Gib die vier Ausgabezeilen an.

a) Zeile 1 1 P
b) Zeile 2 1 P
c) Zeile 3 1 P
d) Zeile 4 1 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

a) 23 / 4 = 5, Ganzzahldivision (1 P) b) Rest 3, denn 23 = 5 · 4 + 3 (1 P) c) 23 / 4,0 = 5,75, mit einer Nachkommastelle 5.8 (1 P) d) der Cast schneidet ab: 7, nicht 8 (1 P).

A2
Vom Quelltext zum Programm
AFB I 4 Punkte

Ordne jedem Begriff die passende Beschreibung zu.

Zuordnung 4 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

Präprozessor: #-Zeilen; Compiler: Syntax prüfen, Maschinencode; Linker: zusammensetzen; Header-Datei: Prototypen. Die Beschreibung „Zeile für Zeile“ gehört zu einem Interpreter und bleibt übrig. Je richtige Zuordnung 1 P.

A3
Zeiger und Adressen
AFB I 4 Punkte

Nenne die wahren Aussagen. Es gilt int x = 10; int *p = &x;

Wähle alle wahren Aussagen aus. (mehrere Antworten richtig) 4 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

Wahr: *p = 10, p speichert &x, *p = 3 schreibt in x, sizeof misst in Byte. Falsch: p enthält eine Adresse, nicht 10; Adressen ändern sich bei jedem Start. Je richtige Auswahl 1 P, je Fehlklick 1 P Abzug.

A4
Blinken auf dem Arduino
AFB I 4 Punkte
Arduino-Sketch
void loop() {
  digitalWrite(13, HIGH);
  delay(300);
  digitalWrite(13, LOW);
  delay(100);
}

Die LED an Pin 13 wird von diesem loop() gesteuert. Berechne die gesuchten Größen.

a) Periodendauer T 1 P
ms
b) Frequenz f 1 P
Hz
c) Wie oft leuchtet die LED in 30 s auf? 2 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

a) T = 300 ms + 100 ms = 400 ms (1 P) b) f = 1 / 0,4 s = 2,5 Hz (1 P) c) 30 s · 2,5 Hz = 75 bzw. 30 000 ms / 400 ms = 75 (2 P).

AFB II

Zusammenhänge herstellen

22 Punkte
A5
Ein Array auswerten
AFB II 6 Punkte
C
int w[6] = {5, 8, 3, 8, 6, 2};
int s = 0, z = 0;
for (int i = 0; i < 6; i++) {
    if (w[i] > 4) {
        s += w[i];
        z++;
    }
}
printf("%d %d %.2f\n", s, z, (double) s / z);

Bestimme die drei ausgegebenen Werte.

a) Wert von s 2 P
b) Wert von z 2 P
c) dritte Zahl der Ausgabe 2 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

i012345
w[i]583862
> 4?✓✓–✓✓–
s51313212727
z122344

a) s = 27 (2 P) b) z = 4 (2 P) c) (double) 27 / 4 = 6,75, Ausgabe 6.75 (2 P; ohne Cast wäre es 6 — dann 0 P).

A6
Zeiger als Parameter
AFB II 6 Punkte
C
#include <stdio.h>

void f(int *a, int b) {
    *a = *a * 2;
    b = b + *a;
}

int main(void) {
    int x = 3, y = 4;
    int *p = &y;
    f(&x, y);
    f(p, x);
    printf("%d %d\n", x, y);
    return 0;
}

Analysiere die beiden Aufrufe von f.

a) ausgegebener Wert von x 2 P
b) ausgegebener Wert von y 2 P
c) Warum ändert die Zeile b = b + *a; keine Variable in main? (eine Antwort richtig) 2 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

1. Aufruf f(&x, y): x = 3 · 2 = 6; b ist eine Kopie von y. 2. Aufruf f(p, x): p zeigt auf y, also y = 4 · 2 = 8. Ausgabe 6 8.

a) 6 (2 P) b) 8 (2 P) c) b ist ein Wertparameter — Änderungen betreffen nur die Kopie (2 P).

A7
Fehler finden
AFB II 6 Punkte
C · begruessung.c
 1#include <stdio.h>
 2#include <string.h>
 3
 4int main(void) {
 5    char name[20];
 6    int alter;
 7    scanf("%d", alter);
 8    strcpy(name, "Jonas");
 9    if (name == "Jonas") {
10        printf("Hallo %c, du bist %d\n", name, alter);
11    }
12    return 0;
13}

Das Programm soll ein Alter einlesen und „Hallo Jonas, du bist …“ ausgeben. Es enthält drei Fehler. Überprüfe das Programm.

Wähle die drei fehlerhaften Zeilen aus. (mehrere Antworten richtig) 6 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

Zeile 7: scanf("%d", &alter); — scanf braucht die Adresse. Zeile 9: strcmp(name, "Jonas") == 0 statt ==, das Adressen vergleicht. Zeile 10: %s statt %c für eine Zeichenkette. Zeile 5, 6 und 8 sind korrekt (20 Byte reichen für „Jonas“). Je richtige Zeile 2 P, je Fehlklick 2 P Abzug.

A8
Ein Objekt verfolgen
AFB II 4 Punkte
C++
class Zaehler {
private:
    int wert;
    int grenze;
public:
    Zaehler(int g) { wert = 0; grenze = g; }
    void plus() { if (wert < grenze) wert++; }
    void reset() { wert = 0; }
    int get() { return wert; }
};

int main() {
    Zaehler z(3);
    for (int i = 0; i < 5; i++) {
        z.plus();
    }
    cout << z.get() << " ";
    z.reset();
    z.plus();
    Zaehler &r = z;
    r.plus();
    cout << z.get() << endl;
    return 0;
}

Ermittle die Ausgabe.

a) erste ausgegebene Zahl 2 P
b) zweite ausgegebene Zahl 1 P
c) Was bewirkt private bei wert? (eine Antwort richtig) 1 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

a) plus() erhöht nur bis zur Grenze 3 — die letzten zwei Aufrufe bleiben wirkungslos: 3 (2 P). b) reset → 0, plus → 1; r ist eine Referenz auf z, r.plus() → 2 (1 P). c) Kapselung: Zugriff nur über die öffentlichen Methoden (1 P).

AFB III

Verallgemeinern und beurteilen

12 Punkte
A9
Aussagen beurteilen
AFB III 6 Punkte

Beurteile die Aussagen.

Wähle alle wahren Aussagen aus. (mehrere Antworten richtig) 6 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

Wahr: 0 … 19 + 5 = 5 … 24; 210 = 1024 ≥ 1000; Referenzparameter sind ein zweiter Name der Variablen. Falsch: srand nur einmal (sonst gleiche Zahlen); C prüft keine Grenzen (undefiniertes Verhalten); „Hallo“ braucht 6 Byte mit \0. Je richtige Auswahl 2 P, je Fehlklick 2 P Abzug.

A10
Die Wetterstation auswerten
AFB III 6 Punkte

Die Schul-Wetterstation speichert die Mittagstemperaturen einer Woche in int t[7] = {12, 15, 9, 17, 17, 11, 14}; Du sollst zwei Funktionen entwerfen: ersterMaxIndex(t, n) liefert den Index des ersten Tages mit der höchsten Temperatur, tageUeberSchnitt(t, n) die Anzahl der Tage, die wärmer als der Durchschnitt sind.

a) Welcher Schleifenkopf durchläuft alle Elemente korrekt? (eine Antwort richtig) 2 P
b) Rückgabewert von ersterMaxIndex(t, 7) 2 P
c) Rückgabewert von tageUeberSchnitt(t, 7) 2 P
Lösung anzeigen (nach Auswerten freigeschaltet)

Erwartungshorizont:

C
#include <stdio.h>

int ersterMaxIndex(int t[], int n) {
    int pos = 0;
    for (int i = 1; i < n; i++) {
        if (t[i] > t[pos]) pos = i;
    }
    return pos;
}

int tageUeberSchnitt(int t[], int n) {
    int summe = 0;
    for (int i = 0; i < n; i++) summe += t[i];
    double schnitt = (double) summe / n;
    int anzahl = 0;
    for (int i = 0; i < n; i++) {
        if (t[i] > schnitt) anzahl++;
    }
    return anzahl;
}

int main(void) {
    int t[7] = {12, 15, 9, 17, 17, 11, 14};
    printf("%d\n", ersterMaxIndex(t, 7));
    printf("%d\n", tageUeberSchnitt(t, 7));
    return 0;
}
Ausgabe
3
4

a) Indizes 0 … n − 1 (2 P); sizeof(t) wäre 28 Byte, nicht 7 Elemente. b) Maximum 17 zuerst bei Index 3 — mit > bleibt der erste Treffer stehen (2 P). c) Summe 95, Schnitt 95 / 7 ≈ 13,57 (mit Cast!); wärmer sind 15, 17, 17, 14 → 4 Tage (2 P).

Ergebnis

Erreicht
0 / 50
Prozent
0 %
Note
—
AufgabeThemaPunkte

Notenschema

PunkteNoteBeurteilung
46 – 50 P1sehr gut
40 – 45 P2gut
30 – 39 P3befriedigend
22 – 29 P4ausreichend
12 – 21 P5mangelhaft
0 – 11 P6ungenügend