Fachschaft Informatik

Prüfungsprotokolle


Prüfungsprotokolle lesen



Protokolle (14 gefunden)

Nr.PrüferFach
588 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

Dieses Prüfungsprotokoll ist direkt nach der Prüfung und vor der Bewertung entstanden.
= 27. Februar 2013
= 3 Tage bis eine Woche
= Vorlesungs - und Übungsfolien
= Sehr angenehm. Keineswegs gezwungen.
= 13 Aufgaben

1. Umrechnen von Zahlen in andere Zahlensysteme
a) 2016 von Hex in Dez umwandeln
b) 11001100 Als 16 Bit 2er Komplement dargestellte Zahl in Dez umwandeln
c) 11001100 Als 8 Bit 2er Komplement dargestellte Zahl in Dez umwandeln
d) Einen Ausdruck berechnen (sowas wie 1 + 4.4 + \"3\" + 10/4 * 0.5)
2. Definition \"Datentyp\" angeben.

3. Es waren zwei verschachtelte For-Schleifen gegeben, zu denen die entsprechenden Ausgaben angegeben werden sollten.

4. Sichtbarkeit von Variablen
   Der Code einer Klasse war gegeben. Dieser hatte neben main() eine Methode, die in main() innerhalb einer
   For-Schleife aufgerufen wurde. 
   Dazu gab es fünf bis sechs mögliche Antworten, die anzukreuzen waren. 
   (z.B Die Iterationsvariable der For-Schleife erreicht niemals die Abbruchbedingung.\" oder \"Die For-Schleife durchläuft 100 Iterationen.\")
   

5. Einfache Rekusion
   Gegeben war eine Rekursion.
a) Was ist die Ausgabe bei Eingabe 5, 4?
b) Welche mathematische Funktion wird durch die Rekursion simuliert?

6. Rekursion mit Draw
   Es war eine Rekursion gegeben, die Rechtecke zeichnete.
   Dazu gab es um die 8 Bilder sowie 4 Aufrufe der Rekusion mit je unterschiedlichen Kommandozeilenparametern.
   Den Aufrufen sollten die richtigen Bilder zugeordnet werden.

7. Referenzen, Veränderbarkeit von Datentypen
   Der Code einer Klasse war gegeben. Innerhalb dieses Codes gab es neben main() eine Methode, die innerhalb
   von main() aufgerufen wurde. An die zweite Methode wurden einige Variablen übergeben. 
   Hier sollte nun geprüft werden - durch das Niederschreiben der Ausgabe des Codes - welche der übergebenen
   Variablen nach außen hin verändert wurden.   

8. Einen Ausdruck in Postfix Notation war zu berechnen.

9. Es waren eine Klasse und eine von dieser abgeleiteten Klasse gegeben. 
   Dazu gab es Variablen und Funktionsaufrufe, zu denen die Ausgabe angegeben werden sollte.

10. Verlinkte Listen: Gegeben waren 3 Methoden zum Suchen eines Knotens \"Key\". 
	Dazu gab es 4 Darstellungen von verlinkten Listen.
	Die Methoden sollten den Listendarstellungen zugeordnet werden.

11. Es war ein Toy Programm gegeben.
a)  Gegen sie an, was nach dem Durchlaufen des Programms in den Registern [...] steht.
b)  Gleiche Aufgabe, aber mit einderen Eingaben

Zusatzaufgaben
a) Geben sie 3 No-Ops der Toy-Maschine an. Einer davon darf nicht R[0] enthalten.s

b) Geben sie Zahlen a und b an, sodass gilt: (a>b && a-b < 0)

Nr.PrüferFach
644 Bothe Prof. Grundlagen der Programmierung

Protokoll

Gedankenprotokoll GdP
WS 13/14 Bothe

Aufgabe 1 [Zahlenumrechnung]

a)
die Zahl 259_{10} in binär angegeben [100000011_{2}] diese Zahl war im System zur Basis 5 und 19 anzugeben.

b)
-42 im Zweier-Komplement anzugeben (8 Bit)

c)
Welche zahl hat die größte Quersumme im Zweierkomplement?

Aufgabe 2) [do-while Schleife (Javacode)]

a)
Auslesen des gegebenen Codes und Angabe der konkreten Zahlen oder gegebenen falls \"Keine Ausgabe\" oder
\"Terminiert nicht\".

b)
Umschreiben einer do-while Schleife in eine for-Schleife.

Aufgabe 3 [Rekursion]

a)
Pseudocode verstehen und Formel angeben, die das selbe tut wie der Pseudocode.

b)
Schreibe ein Rekursion die in einem Array a[i] = 2^i einem bei der Eingabe Rekursion(i) einem den Wert der
Zweier Potenz an der Stelle wieder gibt.

Aufgabe 4 [Fehler erkennen]
Java Quellcode gegeben Fehler erkennen und ein Teilen in:
 semantischer Fehler
 lexikographischer Fehler
 kontexunabhängiger Sysntaxfehler
 kontexabhängiger Sysntaxfehler
und diese jeweils mit kurzer Begründung.

Aufgabe 5 [Suchalgorithmen]
Es waren 4 Strukturen geben:

 Eine einfachverkettete Liste

 Eine doppeltverkettete Lise

 Eine einfachverkettete Liste die links verkettet und zyklysch war

 Eine einfachverkettete Liste die rechts verkettet und zyklisch war

Und 3 Suchalgorithmen im Pseudocode und es war auszusagen ob die Suchalgorithmen den Schlüssel finden
und ob sie endenden, für jeden such Algorithmus für jede einzelne Struktur.

Aufgabe 6 [Vererbung und Interfaces]
Es waren im Javacode gegeben:

 1 Komplett geschriebene Klasse, die nicht verändert werden durfte

 1 Interface, welches nicht verändert werden durfte

 1 Ausgabe Text

 2 Klassen die schon Methoden enthalten haben aber verändert werden durften

 1 P welches ein Interface oder Klasse sein durfte mit Methoden nach wahl

Aufgabe war es dies alles zum laufen zu bringen.


Aufgabe 7 [Exceptions]
Es war ein Programm geben mit der Struktur das Methoden eine Ausgabe bei Methoden Aufruf, Methoden
Inhalt, Exceptions, Finally und Methoden Ende gegeben haben.
Aufgabe war hier bei verschiedenen Programmaufrufen die Programm Ausgabe aufzuschreiben.


Aufgabe 8 [Call by Value Call by Refrenz]
Gegeben war ein Javacode in dem ein Objekt erstellt wurde und verschiedene andere und Anzugeben war die
Ausgabe des Programms.

Zusatz Aufgabe [Sortieralgorithmen]
Beantworten mit ja oder nein,zu Angaben der Sortieralalgorithmen:
 Quicksort
 Selectionsort
 Mergesort

Nr.PrüferFach
709 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Datei (Zugriff nur aus dem HU-Netz)

25. Februar 2015 - GdP - Gedächtnisprotokoll.pdf

Nr.PrüferFach
740 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung 25.02.2015
= Prüfungsfragen

== 1.
a)  2015 als Binärzahl
b) -2015 als Binärzahl im 16-Bit-Zweierkomplement
c)  2015 zur Basis 9
d) Asugabe von System.out.println( 2+3+"=="+3+2);
e) Ausgabe von System.out.println( 0.5 + 1/2 );
f) Ausgabe von System.out.println( 1/2 + 1/2 );
g) Ausgabe von: 

public class Mystery {
	public static double toFarenheit(double celsius) {
		return celsius * (9/5) + 32;
	}
	public static void main(String[] args) {
		for(int c = 10; c < 40; c += 10)
			System.out.println(toFarenheit(c));
	}
}


== 2. Die nachfolgenden Werte sind Zahlen im 16-Bit-Zweierkomplement. Was ist das Ergebnis?
BEEF < 1
BEEF + 1
BEEF | 1
BEEF & 1
BEEF ^ 1
BEEF < FACE
FEED | FACE
FEED & FACE
FEED ^ FACE
FEED + FACE


== 3. Wie viele Zeilen gibt das folgende Programmfragment aus, wenn N = 5 ist?
a)
for(int i = 0; i < N; i++)
	for(int j = 0; j < 3; j++)
		System.out.println("GdP macht Spass");
		
b)
for(int i = 0; i < N; i++)
	for(int j = N; j > 0; j--)
		System.out.println("GdP ist cool");
		
c)
for(int i = 0; i < N; i++) {
	int k = 0;
	do {
		System.out.println("GdP ist einfach");
		--k;
	} while(k > 0);
}


== 4. Welchen Wert liefert g(3122013) ?
public static int g(int n) {
	if(n % 2 == 0) return n/10;
	return g(g(n/10));
}


== 5. Referenzen (Welche Ausgabe erzeugt das Programm)

public class References {
	public static void mystery(int x, int[] y, int[] z) {
		x = x + 1;
		y[0] = y[0] + 1;
		z = y;
	}
	
	public static void main(String[] args) {
		int xx = 1;
		int[] yy = { 2, 3, 4, 5 };
		int[] zz = { 6, 7, 8, 9 };
		mystery(xx, yy, zz);
		System.out.println(xx);
		System.out.println(yy[0]);
		System.out.println(zz[0]);
		yy = zz;
		mystery(xx, yy, zz);
		System.out.println(xx);
		System.out.println(yy[0]);
		System.out.println(zz[0]);		
	}
}


== 6. Polymorphie (Welche Ausgabe erzeugt das Programm)

class A {
	public int x;
	public A(int a) { this.x = a; }
	public int getX() { return x; }
	public int getY() { return this.getX() + 1; }
}

class B extends A {
	public int x;
	public B(int b) { suber(b); this.x = 2 * b; }
}

class C extends B {
	public C(int c) { super(c); }
	public int getX() { return 5; }
}

public class Inheritance {
	public static void main(String[] args) {
		A aa = new A(10);
		A ab = new B(100);
		A ac = new C(1000);
		System.out.println(aa.getY());
		System.out.println(ab.getY());
		System.out.println(ac.getY());
		
		B bb = new B(10);
		B bc = new C(100);
		System.out.println(bb.getY());
		System.out.println(bc.getY());
		
		C cc = new C(10);
		System.out.println(cc.getY());^
	}
}


== 7. Implementiere folgende Funktion ohne for/while. Zusatzpunkt für eine Lösung ohne if.

class Node {
	int value;
	Node next;
}

int count(Node liste) {
	int cnt = 0;
	for(Node n = liste; n != null; n = n.next)
		cnt++;
	return cnt;
}


== 8. Toy-Programm schreiben

- Zahl zwischen 0 und 100 von Adresse 01 lesen
- mit 517 multiplizieren
- Ergebnis an Adresse 02 schreiben
- eine generelle Multiplikation ist nicht gefragt
- 517 Additionen sind wegen Speichermangels nicht möglich
- 517 = 512 + 4 + 1, 1 = 2^0   4 = 2^2   512 = 2^9
- Instruktionsreferenz ist gegeben


== Zusatzaufgabe.

in Postfix-Notation: 2 3 + 4 5 * + 1 *
Schreiben Sie den Ausdruck in den geforderten Notationen:
	Infix-Notation
	Prefix-Notation
	Ergebnis des Ausdrucks (als eine Zahl)

	
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Wenn man keine Probleme mit den Übungsaufgaben hatte, war die Klausur eher einfach. Die Zeit hätte für mich gereicht um doppelt so viele Aufgaben zu bewältigen. Dank der Zusatzpunkte ist eine Spitzennote leicht zu erreichen.


Nr.PrüferFach
795 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung
02.03.2017
= Benötigte Lernzeit als Empfehlung
-Voraussetzung: Anwesenheit bei allen Vorlesungen und Übungen
-ein Nachmittag für die, die Java schon Java vor dem Modul sehr gut konnten
-2 Tage für Java Anfänger
= Verwendete Materialien (Bücher, Skripte etc.)
Vorlesungsfolien,Übungsfolien
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Entspannt, selbst bei der Prüfung verliert Redlich nicht seinen Humor 
= Prüfungsfragen
1. Toy Maschine
Drei Werte sind im Hauptspeicher abgespeichert, welchen Wert haben sie nach der Ausführung des Programms ?

2. Statische/Dynamische Bindung
Was wird bei den einzelnen Zeilen ausgegeben?
Die Zeilen beziehen sich auf eine Klasse A und eine Klasse B extends A, welche Variablen und Mehtoden enthalten, die in beiden Klassen die selben Bezeichnungen haben, jedoch unterschiedliche Werte in den Variablen oder Effekte/Ergebnisse bei den Funktionen hat. Dort werden Zeilen angefragt wie:
A a=new B();
a.v1;
a.f1();

3. Java Operatoren
Ist die Benutzung dieser Operatoren(+,-,++,--,|,+=,...) in diesem Kontext erlaubt ? Warum oder warum nicht ?
Tabelle mit Bedeutung der Operatoren ist gegeben.
10 Codezeilen werden gegeben.

4. Rekursives Zeichnen
Aufgabenstellung: Geben sie alle Kombination der folgenden 7 Codezeilen an, damit das Programm folgendes Bild liefert

5. Zahlensysteme
-dezimal zu binär
-binär negieren
-dezimal zur Basis 7 (geht am Besten über dezimaö -> binär -> Basis 7
-größte und kleinste int Zahl

6. Datentypen/Referenztypen
int und String Variablen sind gegeben.
Diese werden einer Funktion übergeben, welche die übergebenden Werte ändert.
Werden auch die Werte bei den Originalvariablen geändert oder nur innerhalb der Funktion?
danach kam für den String noch eine replaceAll Funktion, die den Wert geändert hat, leicht zu überlesen.

= Note (Optional)
1.3
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Eine sehr faire Prüfung, obwohl ich das mit den Operatoren nicht gerechtfertigt fand, da Redlich sagte er will uns nicht Java beibringen sondern das Programmieren und nimmt dann etwas javaspezifisches ran.

Nr.PrüferFach
797 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung
02.03.2017
= Benötigte Lernzeit als Empfehlung
-Voraussetzung: Anwesenheit bei allen Vorlesungen und Übungen
-ein Nachmittag für die, die Java schon Java vor dem Modul sehr gut konnten
-2 Tage für Java Anfänger
= Verwendete Materialien (Bücher, Skripte etc.)
Vorlesungsfolien,Übungsfolien
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Entspannt, selbst bei der Prüfung verliert Redlich nicht seinen Humor 
= Prüfungsfragen
1. Toy Maschine
Drei Werte sind im Hauptspeicher abgespeichert, welchen Wert haben sie nach der Ausführung des Programms ?

2. Statische/Dynamische Bindung
Was wird bei den einzelnen Zeilen ausgegeben?
Die Zeilen beziehen sich auf eine Klasse A und eine Klasse B extends A, welche Variablen und Mehtoden enthalten, die in beiden Klassen die selben Bezeichnungen haben, jedoch unterschiedliche Werte in den Variablen oder Effekte/Ergebnisse bei den Funktionen hat. Dort werden Zeilen angefragt wie:
A a=new B();
a.v1;
a.f1();

3. Java Operatoren
Ist die Benutzung dieser Operatoren(+,-,++,--,|,+=,...) in diesem Kontext erlaubt ? Warum oder warum nicht ?
Tabelle mit Bedeutung der Operatoren ist gegeben.
10 Codezeilen werden gegeben.

4. Rekursives Zeichnen
Aufgabenstellung: Geben sie alle Kombination der folgenden 7 Codezeilen an, damit das Programm folgendes Bild liefert

5. Zahlensysteme
-dezimal zu binär
-binär negieren
-dezimal zur Basis 7 (geht am Besten über dezimaö -> binär -> Basis 7
-größte und kleinste int Zahl

6. Datentypen/Referenztypen
int und String Variablen sind gegeben.
Diese werden einer Funktion übergeben, welche die übergebenden Werte ändert.
Werden auch die Werte bei den Originalvariablen geändert oder nur innerhalb der Funktion?
danach kam für den String noch eine replaceAll Funktion, die den Wert geändert hat, leicht zu überlesen.

= Note (Optional)
1.3
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Eine sehr faire Prüfung, obwohl ich das mit den Operatoren nicht gerechtfertigt fand, da Redlich sagte er will uns nicht Java beibringen sondern das Programmieren und nimmt dann etwas javaspezifisches ran.

Nr.PrüferFach
872 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Datei (Zugriff nur aus dem HU-Netz)

Pruefungsprotokoll20190221.pdf

Nr.PrüferFach
873 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

Datum der Prüfung: 
    21. Februar 2019
Verwendete Materialien:
    Folien der Übung, Folien der Vorlesung, Prüfungsprotokolle
"Atmosphäre" der Prüfung / Verhalten der Beisitzer:
   Sehr angenehm, entspannt. Zeit ist sehr großzügig bemessen

Prüfungsfragen:
1. (7 Punkte die *1,0 zählen)
Eine Funktion tr(n) implementieren die die n-te Tribonacci Zahl ausgibt.
tr(n)=tr(n-1)+tr(n-2)+tr(n-3) für n >= 3.
Bei Eingabe einer negativen Zahl soll das Programm abgebrochen werden.
Für n=0 ist das Ergebnis 0, Für n=1 und n=2 ist das Ergebnis 1.
a) rekursiv
b) iterativ, also mit einer Schleife


2.(3 Punkte die *2,33 zählen)
Eine Funktion schreiben, die drei boolean übergeben bekommt und falls zwei oder mehr davon "true" sind "true" zurückgibt. Ansonsten soll "false" zurück gegeben werden.


3. (6 Punkte die *1,67 zählen)
Gegeben waren drei kurze Toy Programme mit jeweils 5 Zeilen. Für alle drei Programme sollte entschieden werden ob 
a) das Proogramm endlos lange läuft
b) falls es nicht endlos lange läuft, was steht am Ende in Register 2

Alle drei Programme unterschieden sich nur durch 2 Zeilen.
erstes Programm: 
Zahl 11 wird in Register 1 geladen; Zahl 55 wird in Register 2 geladen; Register 2 bekommt das Ergebnis von Register 2 minus Register 1; Falls der Wert im Register 2 größer als 0 ist Sprung zur Subtraktion; halt
10: 7111
11: 7255
12: 2221
13: D212
14: halt
zweites Programm:
Zahl 11 wird in Register 1 geladen; mem[10] in R2 geladen; R2 bekommt R2 minus R1; Falls Wert in R2 größer als 0 Sprung zur Zeile in der zuerst etwas in Register 2 geladen wurde; halt
10: 7111
11: 8210
12: 2221
13: D211
14: halt
drittes Programm:
Zahl 11 wird in Register 1 geladen; mem indirekt [R[1]] in R2; R2 bekommt R2 minus R1; Falls Wert in R2 größer als 0 Sprung zur Subtraktion; halt
10: 7111
11: A2??
12: 2221
13: D212
14: halt


4. (10 Punkte die *1,0 zählen)
Zahlensysteme
a) 16 stetige Binärzahl in Hexazahl umwandeln 
b) 42662 (als Dezimalzahl) in eine Hexazahl umwandeln
c) -51 in 16Bit Zweierkomplement umwandeln
d) (9.0 * (19/3)) als Java Ausdruck


5. (14 Punkte die *0,93 zählen)
Klasse A
    string s
    foo(.....)
    bar(.....)

Klasse B extends A
    string s
    foo(......)

main
    B b = new B()
    A a = b
    .
    .
    .

Alles war auf Public gesetzt.
in der bar stand in etwa (foo() + s), in der foo ("A" + s) in der A Klasse und ("B" + s in der B Klasse), s wurde immer entweder auf "a" oder auf "b" gesetzt.
Gesucht waren die Ausgaben von 
a.foo
b.foo
a.bar
b.bar


6. (6 Punkte die *1,67 zählen)
Gegeben war ein kurzes Programm, das eine Zahl einlesen sollte, so viele Zeichenketten einlesen sollte und in umgekehrter Reihenfolge ausgeben sollte. Das Programm enthielt drei Fehler die korrigiert werden sollten
erstens: Das Programm kompiliert nicht, wieso? Korrektur angeben.
zweitens: Das Programm kompiliert jetzt aber stürzt ab, wieso? Korrektur angeben.
drittens: Das Programm kompiliert jetzt und stürzt nicht mehr ab, aber es wird nicht das richtige ausgegeben, wieso? Korrektur angeben.


7. (4 Punkte die *1,75 zählen)
Ausgabe angeben für ein Programm.
    .
    .
    .

point (x, y)
    this.x = x
    this.y = y

scale(int factor)
    x = factor * x
    y = factor * y

main
    p.point(-2, -1)
    q.point(42, 13)

    System.out.println(p)
    System.out.println(q)

    q = p

    p.scale
    q.scale

    System.out.println(p)
    System.out.println(q)

Nr.PrüferFach
888 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung :  2019 Nachklausur

Bemerkung : Hier gibt es nicht alle fragen, sondern nur 2 die ich gut erinnern konnte 

= Prüfungsfragen 

1) 

 public class Main {
    public static void main(String[] args) {
        A aa = new A(10);
        A ab = new B(100);
        A ac = new C(1000);
        System.out.println(aa.getY());
        System.out.println(ab.getY());
        System.out.println(ac.getY());

        B bb = new B(10);
        B bc = new C(100);
        System.out.println(bb.getY());
        System.out.println(bc.getY());

        C cc = new C(10);
        System.out.println(cc.getY());
    }
}



class Main {
    public static void main(String[] args) {
        int x = 2;
        int[] y = {2, 3, 4};
        String z = "5";
        f(x, y, z);
        z = z.replaceAll("5", "7");
        System.out.println(x);
        System.out.println(y[0]);
        System.out.println(z);
        z.replaceAll("7", "11");
        System.out.println(z);
    }

    public static void f(int x, int[] y, String z) {
        x = 1111;
        y[0] = 2222;
        y = new int[5];
        y[0] = 4444;
        z = "5555";
    }
} 


***** Antwort ist: 
2
2222
7
7
*****

2) Was ist in Java erlaubt und was ist nicht erlaubt? Was is das ergebis bei diejenigen, die erlaubt sind?

 boolean b = false;
        int i1 = 1 * (2) - (b ? 2 : 5 - 3 / 2);
        int i2 = (2 ** (2 + 4) | 3);
        int i3 = (2 - 2 > 0 ? 4 : 2) / 4;
        int i4 = 2 | 1 | 6 & 12;

        double f1 = 1 / .2 * 1. / 2;
        boolean b1 = true + false;
        boolean b2 = !!!true || !true;

        String s1, s2, s3;
        s1 = s2 = 4 + "";
        s3 = "4" += "2";



3) Zahlendarstellung frage genau wie in 2015 Prüfung gekommen ist. 

 Die nachfolgenden Werte sind Zahlen im 16-Bit-Zweierkomplement. Was ist das Ergebnis?

BEEF < 1
BEEF + 1
BEEF | 1
BEEF & 1
BEEF ^ 1
BEEF < FACE
FEED | FACE
FEED & FACE
FEED ^ FACE
FEED + FACE


Nr.PrüferFach
924 Hafner, Verena Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung: 18.06.2020
= Benötigte Lernzeit als Empfehlung 1 Woche
= Verwendete Materialien (Bücher, Skripte etc...) Wiederholungsfolien der VL und Übung
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer Zoom Take Home Klausur. Fragen wurden privat über das Moodle Forum gestellt. 
= Prüfungsfragen
1.1 Schleifen (14 P)
a) Ausgabe einer do-while Schleife bestimmen
b) Diese in eine for Schleife umwandeln

1.2 überladene Funktionen und Typen (4P)
gegeben war eine mehrfach überladene Funktion und 8 verschiedene Aufrufe. 
Ausgabe des Funktionsaufruf bestimmen bei impliziter Typumwandlung

1.3 Algorithmenentwurf (10P)
Maximale Differenz zweier Zahlen im Integer Array. Möglichst in linearer Laufzeit.

2. Rekusion (2*14 P)
gegeben Reihe von pi/4 (Sum(k=0..Inf)( (-1)^k /(2k+1)) )
a) Methode piIterativ(int n) : Pi iterativ nach der n-ten Approximation
b) Methode piRecursive(int n) : dito als rekursive Funktion

3. Zahlendarstellung (10 P)
a) BEAD (hex) --> (Basis 4)
b) BABA (hex) --> (dec) mit und ohne Zweierkompliment
c) CAFE (hex) + DEED (hex) --> (hex >16-bit) und (hex 16-bit)
d) 0 01111110 01000000.. (IEEE 754 float) --> (dec) mit Rechenweg

e)8765 * 12 = 97_0_ finde Basis und fehlende Ziffern

4. Laufzeit-Komplexität (12P)
6 Methoden zu der die O(_) Komplexität angegeben werden soll

5. Vereerbung (20 P)
5.1 gegeben war der Code und die Ausgabe der Klasse Bibliothek und man sollte die Klassen Buch und Fachbuch (erbt von Buch) vervollständigen. Gegeben war jeweils der Konstruktor.

5.2 5 Fragen wahr oder Falsch (Punktabzug wenn falsch beantwortet)

    - Auf eine in Java als private deklarierte Variable kann nur die Klasse
selbst sowie alle von dieser abgeleitete Klassen zugreifen.
    - Eine Klasse wird in Java dadurch als abstrakt gekennzeichnet, dass sie
mindestens eine abstrakte Methode besitzt.
    - Eine als final deklarierte Methode kann in einer abgeleiteten Klasse
nicht überschrieben werden
    - Eine Java-Klasse kann mehrere Interfaces implementieren, aber nur von
einer Basisklasse erben.
    - Die Werte eines als final deklarierten Arrays können nicht verändert
werden.

5. Sortierverfahren (12 P)
Gegeben war das Integer-Array {4, 15, 6, 9, 12, 3, 1} und der Selection Sort Algorithmus in Java Code.
Für jeden Schlleifendurchlauf sollte i und das Array zeilenweise angebeben werden. 


Nr.PrüferFach
946 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung:
24.02.2021
= Benötigte Lernzeit als Empfehlung:
Mit Vorerfahrung nur 1-2 Tage
= Verwendete Materialien:
Vorlesunfsfolien
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Online-Prüfung, hab also nicht viel von ihm mitbekommen
= Prüfungsfragen
Es waren insgesamt 21 Fragen (mit Unterfragen), kann mich jedoch weder an Reihenfolge noch Punkte erinnern und bin mir auch sicher, dass ich bestimmt welche vergessen hab.

1. Implementieren sie die Tribonaccifunktion tri(k) rekursiv und iterativ mit tri(0)=0,tri(1)=1, tri(2)=1 und tri(k)=tri(k-1)+2*tri(k-2)+3*tri(k-3). Bei negativen Zahlen soll abgebrochen werden.

2. Der Folgende Code soll N Zeichenketten einlesen und in umgekehrter Reihenfolge wieder ausgeben.

import gdp.stdlib.*;

public class Test {
	public static void main(String[] args) {
		int N=Integer.parseInt(args[0]);
		String s;
		for(int i=1;i<N;i++) {
			s[i]=StdIn.readString();
		}
		for(int i=N;i>=0;i++) {
			System.out.println(s[i]);
		}
	}
}

Erst gibt es einen Compilerfehler. In welcher Zeile und wie wäre sie richtig?
Dann gibt es einen Laufzeitfehler. In welcher Zeile und wie wäre sie richtig?
Zuletzt macht das Programm das was es soll nicht richtig. An welcher Zeile liegt das und wie wäre sie richtig?

3. Zahlensysteme
    2021_7 in Dezimal
    -1575 in 14-Bit Zweierkomplement
    Ausgabe von System.out.println(12+5+"=="+12+5)
    Max und min Werte von int



4. Geben sie die Ausgabe von folgendem Programm an:



public class Test {

	public static void f(int x, int[] y, String z) {
	   x = 1111;
	   y[0] = 2222;
	   y = new int[5];
           y[0] = 4444;
           z = "5555";
	}
		
	public static void main(String[] args) {
		   	int x = 3;
		   	int[] y = { 2, 3, 4 };
		   	String z = "5";
		   	f(x, y, z);
		   	z = z.replaceAll("5", "8");
		   	System.out.println(x);         

		   	System.out.println(y[0]);      


		   	System.out.println(z);         


		 	z.replaceAll("8", "14");
		 	System.out.println(z);         
		

	}
}




5. Geben sie Ausgabe von folgendem Programm:

class A {
	public int x;
	public A(int a) { this.x = a; }
	public int getX() { return x; }
	public int getY() { return getX() + 2; }
}

class B extends A {
	public int x;
	public B(int b) { super(b); this.x = 2 * b; }
}

class C extends B {
	public C(int c) { super(c); }
	public int getX() { return 17; }
}

 public static void main(String[] args) {
        A aa = new A(100);
        A ab = new B(1000);
        A ac = new C(10000);
        System.out.println(aa.getY());
        System.out.println(ab.getY());
        System.out.println(ac.getY());

        B bb = new B(100);
        B bc = new C(1000);
        System.out.println(bb.getY());
        System.out.println(bc.getY());

        C cc = new C(100);
        System.out.println(cc.getY());
}


7. Programmtracing

public static int BS(int x, int[] a , int i, int j){
    int m=(i+j) /2;
    if(a[m]=x) return m;
    if(i>=j) return -1;
    if(a[m] > x) return BS(x,a,i,m);
    return BS(x,a,m+1,j);


public static void main(String[] args){ 
 N=Integer.parseINt(args[0]);
 a={ .... 59,65 ....}; //8 Zahlen. Ich weiß nur noch, dass 59 an Stelle 4 und 65 an Stelle 5 war
 System.out.println(BS(N,a,0,7));
}

Geben sie die Ausgabe von 59 und 60 und erklären was das Programm macht.


8. Rekursion
Es war ein Rekursives Bild von Quadraten gegeben und man sollte die Reihenfolge folgender Codezeilen angeben, damit das Bild rauskommt.(Ist natürlich witzlos ohne das Bild und Ich schreib nur Pseudocode)

public static void recur(int n, double x, double y, double size){
2      drawSquare(x,y,size);
3      recur(n-1, x +size /2, y + size/2 , size/2.2);
4      recur(n-1, x +size /2, y - size/2 , size/2.2);
5      recur(n-1, x -size /2, y + size/2 , size/2.2);
6      recur(n-1, x -size /2, y - size/2 , size/2.2);
7      if(n<=0)return;
}

Ich glaube die Richtige Reihenfolge war 734256 

9. Multiplikation mit 517 in TOY wie in 2015

10. sind folgende Ausdrücke immer wahr oder nicht immer. Wobei vorausgesetzt ist, dass immer mindestens zwei Variablen gleich sind:
a==b && a==c && b==c
a==b || a==c || b==c
(a-b) * (a-c) * (b-c) == 0

10. Eine Methode majority implementieren, die drei booleans als Parameter erhält und true zurückgibt, wenn zwei oder mehr wahr sind.

11. Die Begriffe public, static, void und String[] erklären und zeigen warum sie nötig sind. (Anhand der main-Methode).
       



= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Wir haben eine halbe Stunde extra bekommen und ich war trotzdem sehr kanpp fertig. Kann aber auch an meiner Trödelei liegen. Ansonsten sehr angenehme Klausur.

Nr.PrüferFach
952 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung 24.03.2021

= Benötigte Lernzeit als Empfehlung
  - Wenn alle Vorlesungen besucht wurden: 2 Wochen

= Verwendete Materialien (Bücher, Skripte etc...)
  - Vorlesungsfolien, Übungsfolien, Prüfungsprotokolle

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
  - Sehr locker

= Prüfungsfragen

1. Grundlagen:

- Stellen Sie die Dezimalzahl -1275 als 13-bit Binärzahl im Zweierkomplement dar.
- Stellen Sie die Zahl 1477 zur Basis 9 als Dezimalzahl dar.
- Stellen Sie Dezimalzahl 1525 zur Basis 12 dar.
- Welche Ausgabe erzeugt das folgende Programmfragment?
  System.out.println( 7 / 3 * 3 + "==" + 3 + 4);
- Welche ist die größte Zahl die man im 48-bit-Zweierkomplement repräsentieren kann? 
  2^48+1, 2^48, 2^47, 2^47-1
- Welche ist die kleinste Zahl die man im 48-bit-Zweierkomplement repräsentieren kann? 
 -2^48+1, -2^48, -2^47, -2^47-1


2. Binärdarstellungen:

Die Nachfolgenden Werte sind Zahlen im 16-bit-Zweierkomplement. Sie wurden im Hexadezimal notiert.

Sind folgende boolsche Ausdrücke true oder false?

- CAFE < 2
- F00D < 1D01

Was sind die Ergebnisse folgender Rechenoperationen?

- CAFE + 2
- CAFE | 2
- CAFE & 2
- CAFE ^ 2
- F00D | 1D01
- F00D & 1D01
- F00D ^ 1D01
- F00D + 1D01


3. Einfache Rekursion:

In der Vorlesung haben wir erfahren, dass man eine for-Schleife in eine Tail-
Rekursion umschreiben kann und zurück.
Für eine Liste vom typ

   class Node{
       int value;
       Node next;
   }

braucht Ihr noch eine Funktion, die die Anzahl der Elemente in der Liste
aufzählt. Würde man es als for-Schleife schreiben, würde die Funktion beispielsweise
so aussehen.

   public static int count(Node liste){
        int cnt=0;
        for(Node n=liste; n!=null; n=n.next){
            cnt++;
        }
        return cnt;
   }

Jedoch sind eure f und w Tasten defekt, daher dürft ihr weder for noch while
schreiben, if sei aber erlaubt.
Schreibt die Funktion als (Tail-)Rekursion auf, falls ihr if nicht verwendet
erhaltet ihr einen Zusatzpunkt.


4. Vererbung

Was ist die Ausgabe von der folgenden main-Methode Quizz?

class D {
public String s;
public D() { s= "d"; }
public String foo() { return "D" + s; }
public String bar() { return foo() + s; } 
}

class E extends D {
public String s;
public E() { s= "e"; }
public String foo() { return "E" + s; }   
}

public class Quizz {

public static void main(String[] args) {
E e = new E();
D d = e;
		 
System.out.println( d.foo() + d.s );
System.out.println( e.foo() + e.s );
System.out.println( d.bar() + d.s );
System.out.println( e.bar() + e.s );

}


5. Elementare Datentypen:

Was ist die Ausgabe von der folgenden main-Methode Quizz?

public class Referenz{

  public static void mystery(int x, int[] y, int[] z) {
	 x = x + 4;
	 y[0] = y[0] + 4;
	 z = y;
	 }
	
	
  public static void main(String[] args) {
	int xx = 14;
	 int[] yy = {11,16,29,37};
	 int[] zz = {7,22,27,42};
		  
	 mystery(xx,yy,zz);
		  
	 System.out.println(xx);    

	 System.out.println(yy[0]);     
	 System.out.println(zz[0]);    

		  
	 yy = zz;
	 mystery(xx,yy,zz);
		  
	 System.out.println(xx);         

	 System.out.println(yy[0]);      

	 System.out.println(zz[0]);

    }
}

6. Debugging:

Welche der Folgenden Fehlermitteilungen erhalten Sie, wenn Sie die folgenden Programme übersetzen und wie folgt auszuführen versuchen?

% javac Bugs.java
& java Bugs 1

Folgende Fehlermeldungen stehen zur Auswahl:

- Bugs.java: ';' expected
- Bugs.java: cannot resolve symbol
- Bugs.java: missing method body, or declare abstract
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
- Exception in thread "main" java.lang.NumberFormatException
- Exception in thread "main" java.lang.StackOverflowError
- Bugs.java: possible loss of precision 
- Bugs.java: ')' expected
- Bugs.java: missing return statement


1) public class Bugs{
        public class void main (String[] args) {
             a=5;
        }
   }

2) public class Bugs{
        public class void main (String[] args) {
            int a=4
            int b=5;
            int c=6
            System.out.println(c);
        }
   }

3) public class Bugs{
        public class void main (String[] args) {
            int a= Double.parseDouble(args[0]);
        }
   }

4) public class Bugs{
       
     public static void recur(int i) {
              recur(i-1);
     }

     public class void main (String[] args) {
              int a= Double.parseDouble(args[0]);
     }
   }

5) public class Bugs{
       
     public static String f() {
              String s = "";
              for(int i=0; i<3; i++{
                 s = s+"*";
              }
     }

     public class void main (String[] args) {
              String result = f();
     }
   }


7. Toy

Entscheiden Sie für den jeweiligen Code, der sich nur in Zeile 11 und 13 unterscheidet,
ob das Programm terminiert und geben sie falls ja den Wert aus Register
2 (R[2]) an. (Toy Referenzcard gegeben)


Toycode 1:
10: 7111 R[1] <- 0011
11: 7255 R[2] <- 0055
12: 2221 R[2] <- R[2] - R[1]
13: D212 if (R[2] > 0) goto 12
14: 0000 halt

Toycode 2:
10: 7111 R[1] <- 0011
11: 8210 R[2] <- mem(10)
12: 2221 R[2] <- R[2] - R[1]
13: D211 if (R[2] > 0) goto 11
14: 0000 halt

Toycode 3:
10: 7111 R[1] <- 0011
11: A201 R[2] <- mem(R[1])
12: 2221 R[2] < - R[2] - R[1]
13: D212 if(R[2] > 0) goto 12
14: 0000 halt

8. Grafische Rekursion:


Folgendes Programm war gegeben:

public class SquareArt {

 public static void fieldOfScreens(double x, double y, double radius, boolean fill, int level) {
 if (level == 0) {
 if (fill) StdDraw.filledSquare(x, y, radius);
   return;
  }
   else {
   double r = 0.5 * radius;
  fieldOfScreens(x - r, y - r, r, fill, level-1);
  fieldOfScreens(x - r, y + r, r, !fill, level-1);
   fieldOfScreens(x + r, y - r, r, !fill, level-1);
  fieldOfScreens(x + r, y + r, r, fill, level-1);
  }
 }
		    
   public static void main(String[] args) {
   int N = Integer.parseInt(args[0]);
   fieldOfScreens(0.5, 0.5, 0.5, true, N);
   }

} 

Es sollte entschieden werden welches Bild ausgegeben wird für N=0, N=1, N=2 und N=3.



9. Aufrufkonvention

Was ist die Ausgabe bei dem folgenden Programm?

public class Param {

	private char c;
	     
        public Param(char c) {this.c = c;}
	    
        public void print() {
	 char a = 'a';
	 char b = 'b';
	   
	 char c[] = {'c'};
	 char e[] = {'e'};
	    
	 Param g = new Param('g');
	 Param i = new Param('i');
	     
	 foo(a);
	 bar(b);
	 foo(c); 
	 bar(e);
	 foo(g); 
	 bar(i);
	       
	 System.out.println("" + a + b + c[0] + e[0] + g + i);
	     }
	     
	public void foo(char p)   {p = 'k';}
	public void foo(char p[]) {p = new char[] {'q'};}
	public void foo(Param p)  {p.c = 'u'; }
	     
	public void bar(char p)   {p = new Param('o').c;}
	public void bar(char p[]) { p[0] = new Param('r').c;}
	public void bar(Param p)  {p = new Param('v');}
	     
	public String toString() { return "" + c;}
	     
	public static void main(String s[]) {
	       new Param('z').print();
	 }

} 

Note: Das Programm lässt sich übersetzen und ausführen


10: Minimum

Implementieren Sie die folgenden zwei Funktionen:

static int min2(int a, int b)
static int min6(int a, int b, int c, int d, int e, int f)

Die Funktionen sollen jeweils das kleinste ihrer Argumente als Ergebnis zurückliefern.
Es dürfen keine Bibliothesfunktionen verwendet werden. Für jede Anwendung einer gewöhnlichen ("if) oder arithmetischen (?:") Kontrollstruktur werden Ihnen drei Punkte abgezogen (Maximal 9 Punkte sind zu erreichen).
Ansonsten dürfen alle anderen Anweisungen benutzt werden, einschließlich Aufrufe von min2() und min6().


11: Programmausführung

Der Binomialkoeffizient C(int N, int k) gibt an wie viele verschiedene Arten man aus einer Menge von N Elementen eine Teilmenge mit k Elementen auswählen kann. Er kann wie folgt rekursiv berechnet werden:

public static int C(int N, int k) {
   if (k==0) return 1;
   if (N==0) return 0;
   return C(N-1, k) + C(N-1, k-1);
}

1) Welches Ergebnis liefert der Aufruf C(6,2)

2) Für die Berechnung von C(36,18) braucht ein herkömmlicher Pc über 15 Minuten. Des Weiteren liefert dieser Aufruf ein falsches Ergebnis, nämlich 485.200.700 anstatt 9.075.135.300. Erklären sie diese beiden Phänomene.






= Note (Optional)
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)

  - Eine sehr faire Klausur die mit genügend Vorbereitung gut zu bestehen war.
    Einzig und alleine die Aufgabe 6 hat mir Kopfzerbrechen bereitet, da ich selber nicht mit 
    Linux arbeite und daher andere Fehlermeldungen gewöhnt bin.

Nr.PrüferFach
998 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung: 16.02.23
= Benötigte Lernzeit als Empfehlung: Keine Erfahrung: 2-3 Wochen, Viel Erfahrung: 1-3 Tage
= Verwendete Materialien (Bücher, Skripte etc...): Toy-Reference-Card
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer: Angenehm
= Prüfungsfragen (nicht unbedingt diese Reihenfolge), insgesamt 9:



Aufgabe Bugs:
Welche Fehlermeldung erhält man, wenn man nacheinander in der Konsole "javac Test.java" und "java Test 5.0" ausführt:

Mögliche Fehlermeldungen:
- Test.java:n: error: non-static method cannot be referenced from a static   context
- Test.java:n: error: ';' expected
- Exception in thread "main" java.lang.NullPointerException
- Test.java:n: error: cannot resolve symbol
- Test.java:n: error: missing return statement
- Exception in thread "main" java.lang.StackOverflowError
- Test.java:n: error: missing method body, or declare abstract
- Test.java:n: error: incompatible types: possible lossy conversion

a)
public class Test{
  public static void main(String[] args){
    int a = Double.parseDouble(args[0]);
  }
}

b)
public class Test{
  public static void main(String[] args){
    a = 3;
    System.out.println(a);
  }
}

c)
public class Test{
  public static void main(String[] args){
    String s = f(8);
  }
  public static String f(int n){
    String s = "";
    for(int i = 0; i < n; i++){
      s += "*";
    }
  }
}

d)
public class Test{
  public static void main(String[] args){
    System.out.println(rec(3));
  }
  public static int rec(int i){
    return rec(i-1);
  }
}

e)
public class Test{
  public static void main(String[] args){
    int a = 12
    int b = 2;
    int c = 20;
    System.out.println(c);
  }
}




Aufgabe Toy: Was steht nach Ausführung des Programms in den Speicherzellen 00, 01, 02? (a) und b) unterscheiden sich nur in Zelle 02)
00: 2059
01: 35C3
02: 0000 (a)/ 000B (b)

10: 8A00
11: 8B01
12: 8C02
13: CC16
14: 9B00
15: C017
16: 9A01
17: 0000




Aufgabe Stern: 
a) Was gibt mystical(3) aus?
b) Was gibt mystical(4) aus?
c) Was gibt mystical(-1) aus?
   []  es passiert nichts
   []  es werden unendlich viele * Ausgegeben
   []  es geht in eine Endlosschleife und nichts wird ausgegben
   []  es wird eine Leerzeile ausgegeben und es gibt einen Stackoverflow
   []  es wird genau ein * ausgegeben
   []  Die Lösung ist oben nicht angegeben
   (eventuell noch weitere Möglichkeiten)

public class Stern{
  public static void stern(int N){
    for(int i = 0; i < N, i++)
      System.out.print("*");
    System.out.println();
  }

  public static void mystic(int N){
    if(N == 0) return;
    stern(N);
    mystic(N-1);
    stern(N);
  }
}




Aufgabe 5: Was gibt folgendes Program aus?
public class a5 {
    public static void f(int x, int[] y, String z) {
        x = 1111;
        y[0] = 2222;
        y = new int[5];
        y[0] = 4444;
        z = "5555";
    }

    public static void main(String[] args) {
        int x = 1;
        int[] y = { 2, 3, 4 };
        String z = "5";
        f(x, y, z);
        z = z.replaceAll("5", "6");
        System.out.println(x);
        System.out.println(y[0]);
        System.out.println(z);
        z.replaceAll("6", "12");
        System.out.println(z);
    }

}




Aufgabe Quizz: Was gibt folgendes Program aus?
class B {
    public String s;

    public B() {
        s = "b";
    }

    public String foo() {
        return "B" + s;
    }

    public String bar() {
        return foo() + s;
    }

}

class C extends B {
    public String s;

    public C() {
        s = "c";
    }

    public String foo() {
        return "C" + s;
    }

}

public class Quizz {

    public static void main(String[] args) {
        C c = new C();
        B b = c;

        System.out.println(b.foo() + b.s);
        System.out.println(c.foo() + c.s);
        System.out.println(b.bar() + b.s);
        System.out.println(c.bar() + c.s);
    }

}




Aufgabe Inheritance : Was gibt folgendes Program aus?
class A {
    public int x;

    public A(int a) {
        this.x = a;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return this.getX() + 2;
    }
}

class B extends A {
    public int x;

    public B(int b) {
        super(b);
        this.x = 2 * b;
    }
}

class C extends B {
    public C(int c) {
        super(c);
    }

    public int getX() {
        return 18;
    }
}

public class Inheritance {
    public static void main(String[] args) {
        A aa = new A(10);
        A ab = new B(100);
        A ac = new C(1000);
        System.out.println(aa.getY());
        System.out.println(ab.getY());
        System.out.println(ac.getY());

        B bb = new B(10);
        B bc = new C(100);
        System.out.println(bb.getY());
        System.out.println(bc.getY());

        C cc = new C(10);
        System.out.println(cc.getY());
    }
}




Aufgabe Umrechnen:
a) 1738 Dezimal in Hexadezimal 

b) -1738 Dezimal in 16 Bit Zweierkomplement

c) 110010101110_2 und 100111110_2 addieren und das Ergebnis im Heptalsystem angeben

d) Ausgabe von: "Die Summe ist: " + 5 + 33 / 9

e) Ankreuzen was die größte und kleinste Zahl in Java im 32 Bit Zweierkomplement ist

Größte: 2^(32)     2^(31)     2^(32)-1     2^(31)-1     2^(32)+1     2^(31)+1

Kleinste: -2^(32)     -2^(31)     -2^(32)-1     -2^(31)-1     -2^(32)+1     -2^(31)+1




Aufgabe Binomialkoeffizient:
Der Binomialkoeffizient C(int N, int k) gibt an wie viele verschiedene Arten man aus einer Menge von N Elementen eine Teilmenge mit k Elementen auswählen kann. Er kann wie folgt rekursiv berechnet werden:

public static int C(int N, int k) {
   if (k==0) return 1;
   if (N==0) return 0;
   return C(N-1, k) + C(N-1, k-1);
}

1) Welches Ergebnis liefert der Aufruf C(4,2)

2) Für die Berechnung von C(36,18) braucht ein herkömmlicher Pc über 15 Minuten. Des Weiteren liefert dieser Aufruf ein falsches Ergebnis, nämlich 485.200.700 anstatt 9.075.135.300. Erklären sie diese beiden Phänomene.




Aufgabe Tribonacci: 
Die tribonacci Reihe ist folgendermaßen rekursiv definiert: trib(n) = trib(n-1) + trib(n-2) + trib(n-3), 
wobei trib(0) = 0, trib(1) = 1, trib(2)=1. Implementiere eine Funktion trib(int n) 
  a) rekursiv, 
  b) iterativ, also mit einer Schleife, 
welche die n-te Tribonacci Zahl berechnet. Bei negativen Zahlen soll das Programm abgebrochen werden.



= Note (Optional) 1.0
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...) War denke ich eine ganz faire Prüfung, aber es gab einen Fehler bei der Benotung.... Die Einsicht kann ich jedem empfehlen

Nr.PrüferFach
1021 Mendling, Jan Prof. Dr. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung: 22.02.2024
= Benötigte Lernzeit als Empfehlung: Für diejenigen, die Programmieren neulich gelernt haben: 1-2 Wochen
= Verwendete Materialien: Übungsfolien, Prüfungsprotokolle, Repetetorium, https://www.rapidtables.com/convert/number/base-converter.html, https://www.h-schmidt.net/FloatConverter/IEEE754.html
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer: Angenehm, die Fragen wurden deutlich beantwortet
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...): Faire Prüfung



1. Grundlagen (ca. 5+6+4 p von insgesamt 90 p)
<0> Ausgabe des Programms angeben für n = 5, n = 15/7, n = -3 und n = 11
public static void mystery (int n) {
    for (int i = 3; i <= n; i++) {
        if (i % 2 == 0) {
            continue;
        }

        boolean b = true;

        for (int k = 3; k*k <= i; k += 2) {
            if (i % k == 0) {
                b = false;
                break;
            }
        }

        if (b) { System.out.println(i+" "); }
    }
}

<1> Innere for-Schleife über k aus <0> in do-while-Schleife umwandeln

<2> Bedingungsoperatoren: Ausgabe der folgenden Zeile (Zeile in der Arbeit war vermutlich leicht anders) mit verschiedenen a, b, c.
System.out.println(a > b ? a < c ? a : c : b > c ? b : c)
1: Ausgabe mit a = 3, b = 2, c = 1
2: Ausgabe mit a = 1, b = -2, c = 3
3: Ausgabe mit ....





2. Zahlen umrechnen (ca. 4+4+6+4 p)
<0> Zahlen

    2024_10 in Basis 2 und 8 angeben

    1018_14 in Basis 16  (es gab eine Hilfstabelle 10x10_16)

<1> Mehr Zahlen

    512_6 + 1024_6

    FACE_16 & BABE_16

    DEAD_16 - C0DE_16

<2> Floating Point IEEE Darstellung

    Gegebene Zahl:    0 10000001 00000000000000000000000

    1) Das vierfache der gegebenen Zahl.

    2) Gegebene Zahl + 2.

    3) -4,75 als 32 Bit Floating Point Number.




3. Prozedurale Programmierung (ca. 15+6 p)
<0> Programm schreiben, das eine beliebige positive Zahl n zur Basis b (2-32) als Binärzahl ausgibt. Gegeben war der Tipp, sich am Horner-Schema zu orientieren, und folgendes:

    char[] keys = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();

    public static String toBase(int n, int b){ /* Your code goes here */ }


<1> Arrays: Ausgabe bzw. compile oder runtime error jeder Zeile angeben (ungefähre Zahlen und Aufrufe)

    int[][] x = {{},{1,2,5,6,2,7,9},{5,3,9,5}};


    System.out.println(x[1][0]);

    x[0] = new int[0];

    System.out.println(x[0][0];

    x[0] = new int []{2,6,3,6,2};

    System.out.println(x[1][1]);

    System.out.println (x[2][1].length);




4. Rekursion (ca. 5+13 p)
<0> Ausgabewerte zweier Funktionen angeben, die sich gegenseitig aufrufen.
public static boolean foo(int n) {
    if (n == 0) {
        return true;
    } else {
        return( bar( n - 1 ) );
    }
}

public static boolean bar(int n) {
    if (n == 0) {
        return false;
    } else {
        return ( foo( n - 1 ) );
    }
}

a:  Rückgabe für foo(2)
b:  Rückgabe für foo(5)
c:  Rückgabe für foo(-1)
d:  Wie oft wird bar mit foo(2800) aufgerufen?
e:  Was berechnet foo im Allgemeinen für positive ganze Zahlen?

<1> Binary Search Suchalgorithmus (findet Position eines Values in einem Array) von rekursiver Implementierung in Schleifen-Form umwandeln.




5. OOP (ca. 13+5 p)
<0> Gegeben: Klasse "Rectangle":
public class Rectangle{
    double length;
    double width;
    static int c;

    public Rectangle(double length, double width){
        this.length = length;
        this.width = width;
    }

    public double calculateArea(){
        c++;
        return this.length * this.width;
    }

    public boolean isBiggerThan(Rectangle otherRectangle){
        c += 2;
        return calculateArea() > otherRectangle.calculateArea();
    }

    public static void main(String args[]){
        Rectangle r1 = new Rectangle(5.0, 3.0);
        Rectangle r2 = new Rectangle(4.0, 4.0);
        System.out.println(r1.length);
        System.out.println(c);
        System.out.println(r2.calculateArea());
        System.out.println(r1.isBiggerThan(r2));
        System.out.println(c);
    }
}

a: Was geben die 5 System.out.println() aus main() aus?
b: Einen zweiten Konstruktor mit anderer Signatur anlegen.

<1> Gegeben: Interfaces, abstrakte Klassen und Klassen A, B, C, D welche voneinander erben/ sich implementieren.
Es werden neue Instanzmethoden/ Objekte etc. geschaffen, man muss angeben, welche zulässig oder nicht zulässig sind (Per Boxen zum Ankreuzen) (5 Punkte)