Übungsaufgaben zu Datentypen, Variablen und Arrays

https://bildung.social/@oerinformatik/

https://oer-informatik.de/datentypen-variablen-uebungsaufgaben

Datentyp, Wertebereich, Überlauf, Speicherbedarf, Array, Index, globale Variable, Namenskonvention, CSV, Übungsaufgaben, Prüfungsvorbereitung

tl/dr; (Bearbeitungszeit insgesamt 69 min, mehrere Aufgaben): Zwei Übungsaufgaben zu Datentypen und Variablen: Wertebereiche berechnen, vorgeschlagene Datentypen für Messwerte eines Mikrocontrollers beurteilen und speichersparend korrigieren, Speicherbedarf und Überlauf berechnen, Nachkommastellen entfernen, Fehler in einer Array-Deklaration finden, einen Fehler mit lokalen und globalen Variablen finden und beheben, einen Methodenkopf aus einer Beschreibung ableiten und Aufrufe beurteilen, Bezeichner nach Namenskonventionen verbessern, Werte tauschen und einen CSV-Importfehler analysieren. Alle Lösungen sind ausgeblendet und mit Punkteverteilung versehen [AI-Assisted]. (Zuletzt geändert am 28.10.2026)

Diese Übungsaufgaben gehören zum Artikel Datentypen, Variablen und Arrays.

Hinweise zur Bearbeitung: Als FISY oder FIDV musst Du zur Teil-2-Prüfung Aufgaben auf Kernkompetenz-Ebene lösen können, das sind Aufgabe 2.1 und Aufgabe 2.2. Bearbeite die Teilaufgaben schriftlich, bevor Du die Beispiellösung aufklappst. Wo eine Typtabelle vorgegeben ist, gelten deren Größen, auch wenn Deine Programmiersprache andere verwendet.

Du möchtest eigene Aufgaben zum Üben von einem KI-Sprachmodell generieren lassen?

Kopiere den Text in ein KI-Sprachmodell Deiner Wahl und passe Kompetenzstufe, Anzahl, Bearbeitungszeit und Szenario bei Bedarf an. Wie die Aufgaben aufgebaut sind, beschreibt der Artikel Wie sind die Aufgaben aufgebaut?. Prüfe die Ergebnisse mit dem Lehrartikel: KI-Sprachmodelle machen Fehler.

Erstelle neue Übungsaufgaben zum Thema „Datentypen, Variablen und
Arrays“.

Bauplan: Halte Dich an Aufbau, Kompetenzstufen, Operatoren,
Anforderungsbereiche, Punkte und Zeitschätzung, die im Artikel
https://oer-informatik.de/aufgaben-aufbau beschrieben sind.

Fachliche Grundlage:
- https://oer-informatik.de/datentypen-variablen
- https://oer-informatik.de/algorithmen-prozedural
- https://oer-informatik.de/speicherbedarf
- https://oer-informatik.de/datenaustauschformate
- Stilbeispiel: https://oer-informatik.de/datentypen-variablen-uebungsaufgaben

Die Aufgaben sollen Inhalte zu diesen Schlagwörtern abdecken:
- Datentyp
- Wertebereich
- Überlauf
- Speicherbedarf
- Array
- Index
- globale Variable
- Namenskonvention
- CSV

Kompetenzstufe: Kernkompetenz (alternativ: Basiskompetenz, Profilkompetenz, Expertise)
Anzahl: 1 Aufgabe mit Teilaufgaben
Bearbeitungszeit in Minuten ca.: <5 bis 30 min>
Szenario: eines der Szenarien aus dem Bauplan

Vorgehen:
1. Lies zuerst die verlinkten Artikel. Kannst Du keine Webseiten
   abrufen, sag mir das, statt zu raten.
2. Steht bei einer Angabe noch ein Platzhalter in <…>, frag mich
   zuerst danach. Richte Punkte und Zahl der Teilaufgaben nach der
   Bearbeitungszeit (ca. 0,9 min je Punkt).
3. Gib je Aufgabe Titel mit Kompetenzstufe, Ausgangssituation und
   Teilaufgaben mit Operator und Punktzahl aus, dazu die geschätzte
   Bearbeitungszeit.
4. Gib die Beispiellösungen mit Punkteverteilung erst aus, wenn ich
   danach frage.

Aufgabe 2.1: Raumklima an den E-Ink-Türschildern messen (Kernkompetenz)

(ca. 31 min Bearbeitungszeit)

Für das Barcamp „Lernen.Digital.Leben 2027“ am Ratz und Rübe Berufskolleg in Bielefeld hängen an 12 Räumen E-Ink-Türschilder mit einem ESP32-Mikrocontroller und Akku. Emre Aksoy, Azubi im dritten Lehrjahr und Leiter des Technikteams, soll die Firmware erweitern: Die Schilder sollen künftig alle 5 Minuten das Raumklima messen und die Werte über das IoT-Netz an den Info-Server senden. Weil der Arbeitsspeicher des Mikrocontrollers knapp ist und jedes per Funk übertragene Byte Akku kostet, kommt es bei den Datentypen auf jedes Byte an. Für die Firmware (C++ für den ESP32) stehen die Ganzzahltypen fester Breite aus <cstdint> und die üblichen weiteren Typen zur Verfügung:

Größe Ganzzahl mit Vorzeichen Ganzzahl ohne Vorzeichen weitere Typen
1 Byte int8_t uint8_t bool, char (ein Zeichen)
2 Byte int16_t uint16_t –
4 Byte int32_t uint32_t float (ca. 7 signifikante Stellen)
8 Byte int64_t uint64_t double (ca. 15 signifikante Stellen)
dynamisch – – String (Zeichenkette)
  1. Gib den dezimalen Wertebereich von int8_t und von uint16_t an. Ermittle außerdem, wie viele Bit ein vorzeichenloser Ganzzahltyp mindestens haben müsste, um CO₂-Werte bis 5.000 ppm aufzunehmen, und welcher Typ der Tabelle deshalb infrage kommt. (5 Punkte)

Geg.: int8_t = 8 Bit mit Vorzeichen, uint16_t = 16 Bit ohne Vorzeichen, größter CO₂-Wert 5.000

Ges.: Wertebereiche; kleinste Bitzahl n mit 2^n - 1 \geq 5.000

\begin{aligned} \texttt{int8\_t:}\quad -2^{7} = -128 \ \dots\ 2^{7} - 1 &\Rightarrow \underline{\underline{-128 \ \dots\ 127}}\\ \texttt{uint16\_t:}\quad 0 \ \dots\ 2^{16} - 1 &\Rightarrow \underline{\underline{0 \ \dots\ 65.535}}\\ 2^{12} - 1 = 4.095 < 5.000 \leq 8.191 = 2^{13} - 1 &\Rightarrow \underline{\underline{n = 13\ \text{Bit}}} \end{aligned}

13 Bit gibt es als Typ nicht; der nächstgrößere Typ ist uint16_t (2 Byte).

Punkte: je Wertebereich 2 Punkte (je 1 Punkt für untere und obere Grenze), Bitzahl mit Typwahl 1 Punkt.

  1. Emre hat in einem ersten Entwurf für jeden Messwert einen Datentyp festgelegt. Beurteile jeden Vorschlag mit passt, zu klein, zu groß oder ungeeignet und gib, wo nötig, einen besseren Typ aus der Tabelle mit kurzer Begründung an. Ziel ist ein möglichst kleiner Messdatensatz, der trotzdem alle Werte sicher aufnimmt. (12 Punkte)
Nr. Messwert Emres Vorschlag Urteil besserer Typ und Begründung
1 CO₂-Konzentration in ganzen ppm, 400 bis 5.000 uint8_t
2 Raumtemperatur −10,0 bis 45,0 °C, gespeichert als ganze Zehntelgrad uint16_t
3 Zahl der Displayaktualisierungen seit Inbetriebnahme, bis 10 Millionen uint16_t
4 Akkustand in ganzen Prozent int32_t
5 Name des Raums, z. B. „B.104“ oder „Aula“ char
6 Zustand des Fensterkontakts (offen oder geschlossen) uint8_t

Je Zeile 2 Punkte (Urteil 1 Punkt, besserer Typ mit Begründung 1 Punkt; bei „passt“ zählt die Begründung):

Nr. Urteil besserer Typ und Begründung
1 zu klein uint16_t: uint8_t endet bei 255, 5.000 braucht mindestens 13 Bit (siehe a)
2 ungeeignet int16_t: Zehntelgrad reichen von −100 bis 450; ein Typ ohne Vorzeichen kann die Minusgrade nicht speichern. (float mit 4 Byte ist ebenfalls richtig, aber größer.)
3 zu klein uint32_t: 10 Millionen liegen weit über 65.535 (auch int32_t richtig)
4 zu groß uint8_t: 0 … 100 passt in 0 … 255; 1 statt 4 Byte, und negative Werte sind schon durch den Typ ausgeschlossen
5 ungeeignet String: char nimmt nur ein einziges Zeichen auf, Raumnamen sind unterschiedlich lang
6 passt (bedingt) Platz reicht, aber bool ist gleich groß und sagt im Code eindeutig, dass es nur zwei Zustände gibt; deshalb bool vorziehen
  1. Ein Messdatensatz enthält Raumtemperatur, CO₂-Konzentration, Akkustand und Fensterstatus mit den korrigierten Typen aus b) (Temperatur als int16_t in Zehntelgrad). Die Schilder puffern die Messwerte eine Woche lang, bevor sie gesammelt ausgelesen werden. Berechne, wie viel Speicher die Messdatensätze aller 12 Türschilder in einer Woche belegen, und vergleiche mit einer Variante, die float für die Temperatur, int32_t für CO₂ und Akkustand und bool für das Fenster nutzt. Gib die Ersparnis in Prozent an. (5 Punkte)

Geg.: 12 Türschilder, eine Messung alle 5 min, 7 Tage; Datensatz int16_t (2 Byte) + uint16_t (2 Byte) + uint8_t (1 Byte) + bool (1 Byte); Vergleich float (4 Byte) + 2 × int32_t (je 4 Byte) + bool (1 Byte)

Ges.: Speicherbedarf je Woche in KiB für beide Varianten, Ersparnis in %

\begin{aligned} \text{I:}\quad n_{\text{Messungen}} &= \frac{24 \cdot 60\ \text{min}}{5\ \text{min}} \cdot 7 \cdot 12 = 288 \cdot 84 = 24.192\\ \text{II:}\quad s_{\text{Datensatz}} &= 2\ \text{B} + 2\ \text{B} + 1\ \text{B} + 1\ \text{B} = 6\ \text{B}\\ \text{I, II eingesetzt:}\quad S &= 24.192 \cdot 6\ \text{B} = 145.152\ \text{B} = \frac{145.152}{1.024}\ \text{KiB} = \underline{\underline{141{,}75\ \text{KiB}}}\\ \text{Vergleich:}\quad S' &= 24.192 \cdot (4 + 4 + 4 + 1)\ \text{B} = 314.496\ \text{B} = \frac{314.496}{1.024}\ \text{KiB} = \underline{\underline{307{,}125\ \text{KiB}}}\\ \text{Ersparnis:}\quad & 1 - \frac{6}{13} \approx \underline{\underline{53{,}8\ \%}} \end{aligned}

Die speichersparende Variante braucht weniger als die Hälfte des Speichers.

Punkte: Anzahl der Messungen 1 P, Datensatzgröße 1 P, Speicherbedarf 1 P, Vergleichswert 1 P, Ersparnis 1 P.

  1. In einer früheren Firmware-Version wurde die Anzahl der Displayaktualisierungen – wie in Emres Entwurf – in einer Variablen vom Typ uint16_t gezählt. Erläutere, was beim Erhöhen über den größten Wert hinaus geschieht, und berechne, nach wie vielen Tagen das bei einer Aktualisierung je 5 Minuten zum ersten Mal passiert. (4 Punkte)

Erläuterung (2 Punkte): Es kommt zu einem Überlauf. Der größte Wert ist 65.535; wird er um 1 erhöht, passt das Ergebnis nicht mehr in 16 Bit. Das überzählige Bit fällt weg, und der Zähler springt auf 0 zurück. Es gibt keine Fehlermeldung, die Statistik ist danach einfach falsch.

Geg.: größter Wert 65.535, eine Aktualisierung je 5 min

Ges.: Zeit bis zum ersten Überlauf in Tagen

t = (65.535 + 1) \cdot 5\ \text{min} = 327.680\ \text{min} = \frac{327.680}{60 \cdot 24}\ \text{d} \approx \underline{\underline{227{,}556\ \text{d}}}

Nach gut 227 Tagen (etwa 7,5 Monaten) Dauerbetrieb läuft der Zähler über (2 Punkte; ein Ergebnis mit 65.535 statt 65.536 Aktualisierungen ist ebenfalls zu werten).

  1. Auf dem Türschild soll die Temperatur ohne Nachkommastelle angezeigt werden. Nenne zwei Möglichkeiten, dies programmtechnisch umzusetzen, und gib jeweils an, welcher Wert für die Messung 21,7 °C angezeigt wird. (4 Punkte)

Je Möglichkeit mit richtigem Ergebnis 2 Punkte, z. B.:

Möglichkeit Anzeige für 21,7
Typumwandlung (Cast) in eine Ganzzahl, z. B. (int) temperatur 21
Abschneiden mit einer Funktion wie trunc() bzw. Math.Truncate() 21
Runden mit round() 22
Abrunden mit floor() 21
Ausgabe formatieren ohne Nachkommastellen (z. B. printf("%.0f", temperatur)) 22
in Zehntelgrad speichern (int16_t, 217) und Ganzzahldivision durch 10 21

Hinweis: Für eine Anzeige ist Runden meist sinnvoller als Abschneiden, weil 21,7 °C näher an 22 °C liegt.

  1. Die Akkustände der 12 Türschilder (von 1 bis 12 nummeriert) sollen in einem Array liegen. In Emres Entwurf stehen dafür diese beiden Zeilen; die zweite soll Türschild Nr. 12 nach dem Laden auf 100 % setzen:
uint8_t akkustand[11];
akkustand[12] = 100;

Finde die beiden Fehler, gib die korrigierten Zeilen an und beschreibe, was der fehlerhafte Entwurf in C++ zur Laufzeit anrichten kann. (4 Punkte)

uint8_t akkustand[12];
akkustand[11] = 100;
  • Das Array braucht 12 Elemente, eines je Türschild (1 Punkt).
  • Der Index beginnt bei 0, Türschild Nr. 12 liegt deshalb bei Index 11 (1 Punkt).
  • Folge im Entwurf (2 Punkte): Ein Array mit 11 Elementen hat die Indizes 0 bis 10. akkustand[12] liegt außerhalb. C++ prüft die Grenzen nicht; der Wert 100 wird einfach in den Speicher hinter dem Array geschrieben und kann dort eine andere Variable unbemerkt überschreiben. Java oder C# würden stattdessen eine Ausnahme werfen.

Aufgabe 2.2: Akkus im Prüfstand der Fahrradwerkstatt (Kernkompetenz)

(ca. 38 min Bearbeitungszeit)

Die Werkstatt der CSB-Rad GmbH in Bielefeld-Sennestadt prüft E-Bike-Akkus an einem Prüfstand mit 8 Ladeplätzen. Ein Java-Programm liest die Restkapazität jedes Akkus in Prozent ein und zählt, wie viele Akkus unter der Grenze von 70 % liegen; diese werden der Kundschaft zum Austausch angeboten. Cem Sarıkaya, Geschäftsführer Technik und IT, bittet Dich, das Programm zu überarbeiten, das eine Aushilfe geschrieben hat:

Zeile  1 | public class akkupruefung {
Zeile  2 |     static int[] k = new int[8];   // Restkapazität je Ladeplatz in Prozent
Zeile  3 |     static int z = 0;              // Anzahl der schwachen Akkus
Zeile  4 |     static final int grenze = 70;
Zeile  5 |
Zeile  6 |     static void pruefe() {
Zeile  7 |         int z = 0;
Zeile  8 |         for (int i = 0; i < k.length; i++) {
Zeile  9 |             if (k[i] < grenze) {
Zeile 10 |                 z = z + 1;
Zeile 11 |             }
Zeile 12 |         }
Zeile 13 |     }
Zeile 14 |
Zeile 15 |     public static void main(String[] args) {
Zeile 16 |         k = new int[] {92, 64, 71, 38, 85, 69, 100, 77};
Zeile 17 |         pruefe();
Zeile 18 |         System.out.println("Schwache Akkus: " + z);
Zeile 19 |     }
Zeile 20 | }
  1. Das Programm gibt immer „Schwache Akkus: 0“ aus, obwohl drei Akkus unter 70 % liegen. Erläutere die Ursache. (4 Punkte)

In Zeile 7 wird in der Methode pruefe() eine neue lokale Variable z deklariert. Sie hat denselben Namen wie die Klassenvariable z aus Zeile 3 und verdeckt diese innerhalb der Methode. Die Schleife erhöht deshalb nur die lokale Variable (2 Punkte). Diese verschwindet am Ende der Methode; die Klassenvariable z, die in Zeile 18 ausgegeben wird, behält ihren Startwert 0 (2 Punkte).

  1. Baue pruefe() so um, dass die Methode ohne Klassenvariablen für die Akkuwerte und den Zähler auskommt: Sie soll die Restkapazitäten als Parameter erhalten und die Anzahl der schwachen Akkus zurückgeben. Gib die neue Methode und die geänderten Zeilen in main() an und begründe, warum der Fehler aus a) in dieser Form nicht mehr auftreten kann. (6 Punkte)
static int zaehleSchwacheAkkus(int[] kapazitaeten) {
    int anzahl = 0;                              // lokaler Zähler
    for (int i = 0; i < kapazitaeten.length; i++) {
        if (kapazitaeten[i] < grenze) {
            anzahl = anzahl + 1;
        }
    }
    return anzahl;
}

public static void main(String[] args) {
    int[] kapazitaeten = {92, 64, 71, 38, 85, 69, 100, 77};
    int schwache = zaehleSchwacheAkkus(kapazitaeten);
    System.out.println("Schwache Akkus: " + schwache);   // 3
}

Punkte: Methodenkopf mit Array-Parameter und Rückgabetyp int 2 P, lokaler Zähler und return 2 P, Aufruf mit Übernahme des Rückgabewerts in eine lokale Variable 1 P, Begründung 1 P.

Begründung: Es gibt nur noch einen Zähler, und der ist lokal in der Methode. Das Ergebnis verlässt die Methode ausschließlich über den Rückgabewert; eine gleichnamige Variable an anderer Stelle kann nichts mehr verdecken oder verfälschen. Die Klassenvariablen k und z werden überflüssig. Die Konstante grenze darf in der Klasse bleiben, weil sie nur gelesen wird. Nebenbei lässt sich die Methode jetzt mit beliebigen Testarrays einzeln prüfen.

  1. Für den Prüfstand gibt es eine weitere Methode. Ihre Javadoc-Beschreibung lautet:
/**
 * Berechnet den Gesundheitszustand eines Akkus: den Anteil der Energie,
 * die er beim Volladen noch aufnimmt, an seiner Nennenergie.
 * @param gemesseneWh beim Volladen gemessene Energie in ganzen Wattstunden
 * @param nennWh      Nennenergie laut Typenschild in ganzen Wattstunden
 * @return Gesundheitszustand in Prozent mit Nachkommastellen
 */

Leite daraus einen passenden Methodenkopf mit dem Namen berechneZustand ab. Beurteile anschließend die drei folgenden Aufrufe für einen Akku mit 500 Wh Nennenergie, der beim Volladen 412 Wh aufgenommen hat: Welcher ist korrekt, und was geht bei den anderen schief? (6 Punkte)

int zustandA = berechneZustand(412, 500);
double zustandB = berechneZustand(500, 412);
double zustandC = berechneZustand(412, 500);
static double berechneZustand(int gemesseneWh, int nennWh)

Methodenkopf 3 Punkte: Rückgabetyp double (Nachkommastellen), zwei int-Parameter, Reihenfolge wie in der Beschreibung.

Aufrufe je 1 Punkt:

  • A – Compilerfehler: Der Rückgabewert ist double und darf nicht ohne Cast einer int-Variablen zugewiesen werden, weil Nachkommastellen verloren gingen.
  • B – wird übersetzt, rechnet aber falsch: Die Argumente sind vertauscht. Statt 412 : 500 \cdot 100 = 82{,}4\ \% ergibt sich 500 : 412 \cdot 100 \approx 121{,}4\ \%. Der Compiler bemerkt das nicht, weil beide Parameter denselben Typ haben.
  • C – korrekt, liefert 82,4.
  1. Die Bezeichner der Aushilfe sind wenig aussagekräftig und halten sich nicht an die üblichen Java-Konventionen. Gib für akkupruefung, k, z und grenze jeweils einen besseren Bezeichner an und begründe, warum der neue Name für grenze anders geschrieben wird als die Namen der Variablen. (5 Punkte)

Je Bezeichner 1 Punkt (aussagekräftig und richtige Schreibweise), Begründung 1 Punkt, z. B.:

bisher besser Konvention
akkupruefung AkkuPruefung oder AkkuPruefstand Klasse: UpperCamelCase
k kapazitaeten oder restkapazitaetProzent Variable: lowerCamelCase
z anzahlSchwacheAkkus Variable: lowerCamelCase
grenze GRENZWERT_PROZENT Konstante (static final): UPPER_SNAKE_CASE

Begründung: grenze ist mit static final eine Konstante. Die durchgehende Großschreibung zeigt an jeder Verwendungsstelle sofort, dass sich der Wert nicht ändert und an einer zentralen Stelle festgelegt ist; Variablen dagegen werden in lowerCamelCase geschrieben.

  1. Cem Sarıkaya plant, den Prüfstand je nach Auftragslage um weitere Ladeplätze zu erweitern oder Plätze vorübergehend abzubauen. Erläutere je ein Merkmal von Arrays, das für bzw. gegen ihre Verwendung in diesem Programm spricht, und nenne eine Alternative zum Array. (6 Punkte)
  • Dafür (2 Punkte), z. B.: Über den Index ist jeder Ladeplatz direkt und sehr schnell erreichbar; die Werte liegen ohne Verwaltungsaufwand hintereinander im Speicher und lassen sich bequem mit einer Schleife durchlaufen.

  • Dagegen (2 Punkte), z. B.: Ein Array hat eine feste Länge. Kommen Ladeplätze hinzu, muss ein neues, größeres Array angelegt und umkopiert werden; fallen Plätze weg, belegen ungenutzte Elemente trotzdem Speicher. Außerdem kann ein Array nur Werte eines Datentyps aufnehmen (z. B. keine Seriennummer neben der Kapazität).

  • Alternative (2 Punkte): eine dynamische Liste wie ArrayList<Integer> (bzw. eine Liste von Objekten einer Klasse Ladeplatz mit Nummer, Seriennummer und Kapazität), die bei Bedarf wächst und schrumpft.

  1. Für die Ausgabe sollen die Messwerte absteigend sortiert werden. Dabei werden immer wieder zwei Elemente k[i] und k[j] vertauscht. Bringe die nötigen Anweisungen in die richtige Reihenfolge, indem Du sie mit 1, 2 und 3 nummerierst. Eine Anweisung wird nicht benötigt; kennzeichne sie mit X. (3 Punkte)
Anweisung Reihenfolge
k[i] = k[j];
k[j] = k[i];
k[j] = hilf;
int hilf = k[i];
Anweisung Reihenfolge
k[i] = k[j]; 2
k[j] = k[i]; X
k[j] = hilf; 3
int hilf = k[i]; 1

Je richtigem Schritt 1 Punkt. Ohne Hilfsvariable wäre der alte Wert von k[i] nach k[i] = k[j]; verloren.

  1. Die Prüfergebnisse jedes Tages schreibt das Programm in eine CSV-Datei, die Natalia Wróbel in der Buchhaltung mit ihrer deutschsprachigen Tabellenkalkulation öffnet. Inzwischen wird die Restkapazität mit einer Nachkommastelle gemessen und mit String.format(Locale.GERMANY, …) ausgegeben. Ein Ausschnitt:
Ladeplatz,Seriennummer,Restkapazitaet
1,BX-4471,92,5
2,BX-5530,64,0
3,BX-4102,71,3

Natalia meldet, dass die Tabelle vier Spalten statt drei zeigt und mit der Restkapazität nicht gerechnet werden kann. Erkläre die Ursache, schlage zwei verschiedene Abhilfen vor und beurteile, ob ein Wechsel zu JSON für Natalias Zweck die bessere Wahl wäre. (7 Punkte)

Ursache (3 Punkte): Das Komma wird doppelt verwendet – als Trennzeichen zwischen den Feldern und, wegen der deutschen Formatierung, als Dezimalzeichen. Die Tabellenkalkulation trennt 92,5 deshalb in die zwei Spalten 92 und 5. Für CSV gibt es keine verbindliche Festlegung, welches Trenn- und Dezimalzeichen gilt; das schreibende und das lesende Programm müssen aufeinander abgestimmt werden.

Abhilfen (je 1 Punkt), z. B.:

  • Semikolon als Trennzeichen verwenden (in deutschsprachigen Programmen üblich): 1;BX-4471;92,5.
  • Felder mit Dezimalkomma in Anführungszeichen setzen: 1,BX-4471,"92,5" (so sieht es RFC 4180 vor).
  • Die Zahl ohne Dezimalkomma schreiben, z. B. in Zehntelprozent als Ganzzahl (925) oder mit Punkt und beim Import als englisches Zahlenformat einlesen.

Beurteilung JSON (2 Punkte): JSON trennt Felder eindeutig und kennt Zahlen als eigenen Datentyp, das Problem träte also nicht auf. Eine Tabellenkalkulation öffnet JSON aber nicht direkt als Tabelle, Natalia bräuchte einen Import-Schritt oder ein Zusatzwerkzeug. Für flache Tageslisten, die in eine Tabelle sollen, bleibt eine sauber abgestimmte CSV-Datei die einfachere Lösung. (Eine begründete Entscheidung für JSON ist ebenfalls zu werten.)

  1. Entscheide für jede Aussage, ob sie richtig oder falsch ist. (5 Punkte)
Aussage richtig falsch
1. In Java darf eine Variable in derselben Anweisung deklariert und mit einem Startwert versehen werden, z. B. int zaehler = 0;.
2. Eine Klassenvariable static int z; ohne ausdrückliche Wertzuweisung hat in Java beim Programmstart den Wert 0.
3. Nach int mitte = 7 / 2; enthält mitte den Wert 3,5.
4. Die Anweisung anzahl = anzahl + 1; ist eine Initialisierung von anzahl.
5. Eine lokale final-Variable muss nicht schon in ihrer Deklarationszeile einen Wert erhalten, darf aber insgesamt nur einmal einen Wert bekommen.

Je richtiger Entscheidung 1 Punkt:

  1. richtig – Deklaration und Initialisierung lassen sich zusammenfassen; das ist sogar der Normalfall.
  2. richtig – Klassen- und Objektattribute erhalten in Java Standardwerte (0, false, null). Nur lokale Variablen bekommen keinen und müssen vor dem Lesen einen Wert erhalten.
  3. falsch – beide Operanden sind int, es findet eine Ganzzahldivision statt: mitte enthält 3.
  4. falsch – das ist eine Zuweisung. Sie setzt voraus, dass anzahl schon einen Wert hat, sonst meldet der Compiler bei einer lokalen Variablen einen Fehler.
  5. richtig – z. B. final int grenze; und später genau einmal grenze = 70;. Eine zweite Zuweisung lehnt der Compiler ab.

Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Übungsaufgaben zu Datentypen, Variablen und Arrays” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/datentypen-variablen-uebungsaufgaben veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/programmierung/programmiergrundlagen. Erstellt mit KI-Assistenz; von mir umfassend redaktionell überarbeitet, geprüft und freigegeben. Stand: 28.10.2026.

[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: