Ü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) |
- Gib den dezimalen Wertebereich von
int8_tund vonuint16_tan. 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.
- 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 |
- Ein Messdatensatz enthält Raumtemperatur, CO₂-Konzentration, Akkustand und Fensterstatus mit den korrigierten Typen aus b) (Temperatur als
int16_tin 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, diefloatfür die Temperatur,int32_tfür CO₂ und Akkustand undboolfü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.
- In einer früheren Firmware-Version wurde die Anzahl der Displayaktualisierungen – wie in Emres Entwurf – in einer Variablen vom Typ
uint16_tgezä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).
- 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.
- 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 | }- 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).
- 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 inmain()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.
- 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
doubleund darf nicht ohne Cast einerint-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.
- Die Bezeichner der Aushilfe sind wenig aussagekräftig und halten sich nicht an die üblichen Java-Konventionen. Gib für
akkupruefung,k,zundgrenzejeweils einen besseren Bezeichner an und begründe, warum der neue Name fürgrenzeanders 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.
- 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 KlasseLadeplatzmit Nummer, Seriennummer und Kapazität), die bei Bedarf wächst und schrumpft.
- Für die Ausgabe sollen die Messwerte absteigend sortiert werden. Dabei werden immer wieder zwei Elemente
k[i]undk[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.
- 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.)
- 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:
- richtig – Deklaration und Initialisierung lassen sich zusammenfassen; das ist sogar der Normalfall.
- 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. - falsch – beide Operanden sind
int, es findet eine Ganzzahldivision statt:mitteenthält 3. - falsch – das ist eine Zuweisung. Sie setzt voraus, dass
anzahlschon einen Wert hat, sonst meldet der Compiler bei einer lokalen Variablen einen Fehler. - richtig – z. B.
final int grenze;und später genau einmalgrenze = 70;. Eine zweite Zuweisung lehnt der Compiler ab.
Links und weitere Informationen
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]
