📝 Übungsaufgaben Informatik

Prüfungsvorbereitung: Java, Zahlensysteme, Logik und UML

1. Java Grundlagen

Aufgabe 1.1: Variablen und Datentypen

Deklariere und initialisiere passende Variablen für:

  1. Den Namen einer Person
  2. Das Alter (ganze Zahl)
  3. Den Kontostand (mit Nachkommastellen)
  4. Ob jemand volljährig ist
  5. Den ersten Buchstaben des Vornamens
💡 Lösung anzeigen
String name = "Max Mustermann";
int alter = 18;
double kontostand = 1234.56;
boolean istVolljaehrig = true;
char anfangsbuchstabe = 'M';

Aufgabe 1.2: Code-Ausgabe bestimmen

Was gibt folgender Code aus?

int a = 10;
int b = 3;
System.out.println(a / b);
System.out.println(a % b);
System.out.println(a / (double) b);
💡 Lösung anzeigen
Ausgabe:
3 (Integer-Division: 10/3 = 3 Rest 1)
1 (Modulo: 10 % 3 = 1)
3.3333333333333335 (Double-Division durch Cast)

Aufgabe 1.3: If-Else Bedingung

Schreibe eine If-Else-Struktur, die prüft, ob eine Note (1-6) bestanden ist (1-4 = bestanden).

💡 Lösung anzeigen
int note = 3;

if (note >= 1 && note <= 4) {
    System.out.println("Bestanden!");
} else if (note == 5 || note == 6) {
    System.out.println("Nicht bestanden!");
} else {
    System.out.println("Ungültige Note!");
}

Aufgabe 1.4: For-Schleife

Schreibe eine For-Schleife, die alle geraden Zahlen von 2 bis 20 ausgibt.

💡 Lösung anzeigen
// Lösung 1: Mit Schrittweite 2
for (int i = 2; i <= 20; i += 2) {
    System.out.println(i);
}

// Lösung 2: Mit Modulo-Prüfung
for (int i = 1; i <= 20; i++) {
    if (i % 2 == 0) {
        System.out.println(i);
    }
}

Aufgabe 1.5: Array-Verarbeitung

Gegeben ist folgendes Array. Berechne die Summe und den Durchschnitt.

int[] zahlen = {5, 12, 8, 3, 17};
💡 Lösung anzeigen
int[] zahlen = {5, 12, 8, 3, 17};
int summe = 0;

for (int zahl : zahlen) {
    summe += zahl;
}

double durchschnitt = (double) summe / zahlen.length;

System.out.println("Summe: " + summe);           // 45
System.out.println("Durchschnitt: " + durchschnitt); // 9.0

Aufgabe 1.6: Methode schreiben

Schreibe eine Methode istPrimzahl(int n), die prüft, ob eine Zahl eine Primzahl ist.

💡 Lösung anzeigen
public static boolean istPrimzahl(int n) {
    if (n <= 1) {
        return false;
    }
    
    for (int i = 2; i <= Math.sqrt(n); i++) {
        if (n % i == 0) {
            return false;
        }
    }
    
    return true;
}

// Aufruf:
System.out.println(istPrimzahl(7));  // true
System.out.println(istPrimzahl(12)); // false

2. Objektorientierte Programmierung

Aufgabe 2.1: Klasse erstellen

Erstelle eine Klasse Rechteck mit:

  • Privaten Attributen: laenge und breite (double)
  • Einem Konstruktor mit beiden Parametern
  • Getter-Methoden für beide Attribute
  • Einer Methode berechneFlaeche()
  • Einer Methode berechneUmfang()
💡 Lösung anzeigen
public class Rechteck {
    // Private Attribute
    private double laenge;
    private double breite;
    
    // Konstruktor
    public Rechteck(double laenge, double breite) {
        this.laenge = laenge;
        this.breite = breite;
    }
    
    // Getter-Methoden
    public double getLaenge() {
        return laenge;
    }
    
    public double getBreite() {
        return breite;
    }
    
    // Flächenberechnung
    public double berechneFlaeche() {
        return laenge * breite;
    }
    
    // Umfangberechnung
    public double berechneUmfang() {
        return 2 * (laenge + breite);
    }
}

Aufgabe 2.2: Vererbung

Erweitere Aufgabe 2.1: Erstelle eine Klasse Quadrat, die von Rechteck erbt. Ein Quadrat hat nur eine Seitenlänge.

💡 Lösung anzeigen
public class Quadrat extends Rechteck {
    
    // Konstruktor: Länge = Breite
    public Quadrat(double seitenlaenge) {
        super(seitenlaenge, seitenlaenge);
    }
    
    // Getter für Seitenlänge
    public double getSeitenlaenge() {
        return getLaenge();  // oder getBreite()
    }
}

// Verwendung:
Quadrat q = new Quadrat(5);
System.out.println(q.berechneFlaeche());  // 25.0
System.out.println(q.berechneUmfang());  // 20.0

Aufgabe 2.3: Code-Analyse

Was gibt folgender Code aus? Erkläre warum.

public class Test {
    private static int zaehler = 0;
    private int nummer;
    
    public Test() {
        zaehler++;
        nummer = zaehler;
    }
    
    public static void main(String[] args) {
        Test t1 = new Test();
        Test t2 = new Test();
        Test t3 = new Test();
        
        System.out.println(t1.nummer);
        System.out.println(t2.nummer);
        System.out.println(Test.zaehler);
    }
}
💡 Lösung anzeigen
Ausgabe:
1
2
3

Erklärung:

  • zaehler ist static → wird von allen Objekten geteilt
  • Bei jedem new Test() wird zaehler um 1 erhöht
  • t1.nummer = 1 (erster Aufruf)
  • t2.nummer = 2 (zweiter Aufruf)
  • Test.zaehler = 3 (nach drei Aufrufen)

3. Zahlensysteme

Aufgabe 3.1: Dezimal zu Binär

Wandle folgende Dezimalzahlen in Binärzahlen um:

  1. 42
  2. 127
  3. 200
💡 Lösung anzeigen

a) 42 → 101010₂

42 ÷ 2 = 21 Rest 0
21 ÷ 2 = 10 Rest 1
10 ÷ 2 = 5 Rest 0
5 ÷ 2 = 2 Rest 1
2 ÷ 2 = 1 Rest 0
1 ÷ 2 = 0 Rest 1
Von unten nach oben: 101010

b) 127 → 1111111₂

c) 200 → 11001000₂

Aufgabe 3.2: Binär zu Dezimal

Wandle folgende Binärzahlen in Dezimalzahlen um:

  1. 1011₂
  2. 11001₂
  3. 10101010₂
💡 Lösung anzeigen

a) 1011₂ → 11

1×2³ + 0×2² + 1×2¹ + 1×2⁰
= 8 + 0 + 2 + 1 = 11

b) 11001₂ → 25

1×2⁴ + 1×2³ + 0×2² + 0×2¹ + 1×2⁰
= 16 + 8 + 0 + 0 + 1 = 25

c) 10101010₂ → 170

1×2⁷ + 0×2⁶ + 1×2⁵ + 0×2⁴ + 1×2³ + 0×2² + 1×2¹ + 0×2⁰
= 128 + 32 + 8 + 2 = 170

Aufgabe 3.3: Hexadezimal-Umwandlungen

Führe folgende Umwandlungen durch:

  1. 255₁₀ → Hexadezimal
  2. A3₁₆ → Dezimal
  3. FF₁₆ → Binär
💡 Lösung anzeigen

a) 255₁₀ → FF₁₆

255 ÷ 16 = 15 Rest 15 → F
15 ÷ 16 = 0 Rest 15 → F
Ergebnis: FF

b) A3₁₆ → 163

A×16¹ + 3×16⁰
= 10×16 + 3×1
= 160 + 3 = 163

c) FF₁₆ → 11111111₂

F = 1111₂
FF = 1111 1111 = 11111111

Aufgabe 3.4: Binäre Addition

Berechne:

  1. 1011 + 0110
  2. 1111 + 0001
💡 Lösung anzeigen

a) 1011 + 0110 = 10001

  1011
+ 0110
------
10001

Probe: 11 + 6 = 17 ✓ (10001₂ = 17)

b) 1111 + 0001 = 10000

  1111
+ 0001
------
10000

Probe: 15 + 1 = 16 ✓ (10000₂ = 16)


4. Logik

Aufgabe 4.1: Wahrheitstabelle erstellen

Erstelle die Wahrheitstabelle für: (A AND B) OR (NOT A AND C)

💡 Lösung anzeigen
A B C A AND B NOT A NOT A AND C Ergebnis
0000100
0010111
0100100
0110111
1000000
1010000
1101001
1111001

Aufgabe 4.2: De Morgan anwenden

Vereinfache mit De Morgan: NOT (A AND B)

💡 Lösung anzeigen

NOT (A AND B) = (NOT A) OR (NOT B)

In Java: !(a && b) = (!a || !b)

Aufgabe 4.3: Logischen Ausdruck auswerten

Gegeben: A = true, B = false, C = true

Berechne: A OR B AND NOT C

💡 Lösung anzeigen

Priorität: NOT → AND → OR

  1. NOT C = NOT true = false
  2. B AND (NOT C) = false AND false = false
  3. A OR (B AND NOT C) = true OR false = true

Ergebnis: true


5. UML

Aufgabe 5.1: UML zu Java

Übersetze folgendes UML-Diagramm in Java-Code:

Konto
- kontonummer: int
- inhaber: String
- saldo: double
+ Konto(nr: int, inhaber: String)
+ einzahlen(betrag: double): void
+ abheben(betrag: double): boolean
+ getSaldo(): double
💡 Lösung anzeigen
public class Konto {
    // Attribute (alle private)
    private int kontonummer;
    private String inhaber;
    private double saldo;
    
    // Konstruktor
    public Konto(int nr, String inhaber) {
        this.kontonummer = nr;
        this.inhaber = inhaber;
        this.saldo = 0.0;
    }
    
    // Methoden
    public void einzahlen(double betrag) {
        if (betrag > 0) {
            saldo += betrag;
        }
    }
    
    public boolean abheben(double betrag) {
        if (betrag > 0 && saldo >= betrag) {
            saldo -= betrag;
            return true;
        }
        return false;
    }
    
    public double getSaldo() {
        return saldo;
    }
}

Aufgabe 5.2: Text zu UML

Erstelle ein Klassendiagramm für:

"Ein Auto hat eine Marke, ein Modell und ein Baujahr. Es kann starten, fahren und bremsen. Jedes Auto hat einen Motor mit einer bestimmten PS-Zahl."

💡 Lösung anzeigen

Zwei Klassen mit Komposition (Auto besteht aus Motor):

Auto
- marke: String
- modell: String
- baujahr: int
- motor: Motor
+ starten(): void
+ fahren(): void
+ bremsen(): void
Motor
- ps: int
+ getPs(): int

Beziehung: Auto ◆——— Motor (Komposition: "hat einen")

Aufgabe 5.3: Beziehungen erkennen

Welche UML-Beziehung passt am besten?

  1. Universität – Student
  2. Buch – Seite
  3. Hund – Tier
  4. Firma – Mitarbeiter
💡 Lösung anzeigen

a) Universität – Student: Aggregation (◇)
Studenten können existieren, auch wenn die Uni schließt.

b) Buch – Seite: Komposition (◆)
Seiten können nicht ohne das Buch existieren.

c) Hund – Tier: Vererbung (△)
"Ein Hund ist ein Tier" – Generalisierung

d) Firma – Mitarbeiter: Aggregation (◇)
Mitarbeiter können die Firma wechseln.


6. Gemischte Prüfungsaufgaben

Aufgabe 6.1: Code vervollständigen

Vervollständige die Methode, die das Maximum eines Arrays zurückgibt:

public static int findeMaximum(int[] zahlen) {
    // Hier Code ergänzen
}
💡 Lösung anzeigen
public static int findeMaximum(int[] zahlen) {
    int max = zahlen[0];
    
    for (int i = 1; i < zahlen.length; i++) {
        if (zahlen[i] > max) {
            max = zahlen[i];
        }
    }
    
    return max;
}

Aufgabe 6.2: Fehler finden

Finde und korrigiere die Fehler im folgenden Code:

public class Person {
    String name;
    int alter
    
    public Person(String n, int a) {
        name = n;
        alter = a
    }
    
    public void setAlter(int a) {
        if (a > 0)
            alter = a;
            System.out.println("Alter gesetzt");
    }
}
💡 Lösung anzeigen

Fehler und Korrekturen:

  1. Zeile 3: Semikolon fehlt → int alter;
  2. Zeile 7: Semikolon fehlt → alter = a;
  3. Zeile 11-12: Fehlende Klammern bei if (nur erste Zeile wird ausgeführt)
public class Person {
    String name;
    int alter;  // Semikolon
    
    public Person(String n, int a) {
        name = n;
        alter = a;  // Semikolon
    }
    
    public void setAlter(int a) {
        if (a > 0) {  // Klammer auf
            alter = a;
            System.out.println("Alter gesetzt");
        }  // Klammer zu
    }
}

📋 Checkliste für die Prüfung

Java Grundlagen:

  • ☐ 8 primitive Datentypen kennen
  • ☐ Variablen deklarieren und initialisieren
  • ☐ Operatoren (+, -, *, /, %, ++, --)
  • ☐ If-else und switch Strukturen
  • ☐ for, while, do-while Schleifen
  • ☐ Arrays erstellen und durchlaufen
  • ☐ Methoden schreiben und aufrufen

OOP:

  • ☐ Klassen mit Attributen und Methoden
  • ☐ Konstruktoren (auch mit Parametern)
  • ☐ Getter und Setter
  • ☐ Vererbung (extends, super)
  • ☐ Static-Keyword verstehen

Zahlensysteme:

  • ☐ Dezimal ↔ Binär umwandeln
  • ☐ Dezimal ↔ Hexadezimal umwandeln
  • ☐ Binäre Addition

Logik:

  • ☐ AND, OR, NOT, XOR Wahrheitstabellen
  • ☐ Wahrheitstabellen erstellen
  • ☐ De Morgan anwenden

UML:

  • ☐ Klassendiagramme lesen und erstellen
  • ☐ Sichtbarkeit: +, -, #
  • ☐ Beziehungen: Assoziation, Aggregation, Komposition, Vererbung
  • ☐ Aktivitätsdiagramme verstehen