Programmieren I¶
Herzlich willkommen zur Programmieren I Veranstaltung! Wir werden unter Verwendung der Programmiersprache Java die wesentlichen Konzepte lernen, die für das Verständnis modernen Programmierens notwendig sind. Es sind keinerlei Vorkenntnisse erforderlich. Hier einige Tipps, damit Sie die Veranstaltung erfolgreich durchführen und Sie dabei auch Spaß haben:
- In diesem Skript sind bereits alle Inhalte des gesamten Semesters verfügbar. Der Grund dafür ist der, dass Sie sich das jeweilige Thema vorab selbständig erarbeiten können, indem Sie sich den jeweiligen Abschnitt bereits vor der jeweiligen Vorlesung anschauen. Ich empfehle Ihnen diese Vorgehensweise - sie hat sich bewährt!
- In den Übungen sollten Sie ruhig zusammenarbeiten. Es ist auch kein Problem, wenn Sie für das Bewältigen der Übungen etwas länger benötigen. Sollten Sie es gar nicht alleine schaffen, ist das auch kein Problem. Wichtig ist dann, dass Sie sich die Lösung anschauen und es erneut selbständig versuchen. Hören Sie nicht auf, bis Sie es geschafft haben! Sie müssen irgendwann in der Lage sein, alle Übungsaufgaben selbständig zu lösen.
- Sie können die Hausaufgaben gerne zu zweit oder im Team lösen. Achten Sie aber darauf, dass Sie Ihre gemeinsame Lösung vollständig verstanden haben und dass Sie sie danach auch alleine erstellen können. Sie können beim Lösen der Hausaufgaben beliebig kreativ sein! Die Aufgabenstellung gibt Ihnen Anhaltspunkte für eine eventuelle Lösung. Sie können es aber auch ganz anders machen!
- Die Klausurvorbereitung beginnt mit Beginn der Veranstaltung! Es ist nicht möglich, die Klausur am Ende des Semesters zu bestehen, wenn Sie nicht das ganze Semester über intensiv programmieren. Die Übungsaufgaben sind "kleine" Aufgaben, um das in der Vorlesung vermittelte Wissen direkt anzuwenden. Für die Lösung der Hausaufgaben ist bereits ein gewisses Abstraktionsniveau erforderlich, um zu erkennen, dass das in der Vorlesung vermittelte Wissen dafür ausreichend ist.
- Programmieren lernt man nur durch Programmieren! Sie müssen es tun. Das Lesen von Büchern oder das "Anschauen" von Code genügt nicht. Eine Sprache lernt man auch nur durch Sprechen. Sie müssen programmieren, programmieren, programmieren... (siehe auch hier)
- Lassen Sie sich durch Fehler nicht verunsichern, sondern analysieren Sie Ihre Fehler! Bis zur Klausur sollten Sie alle Fehler einmal gemacht haben. Wenn Sie sich überlegen, warum das jeweils ein Fehler war, dann werden Sie diesen Fehler nicht wiederholen und haben durch die Reflektion eine Menge gelernt. Fehler zu machen (und darüber zu reflektieren) gehört zu den besten Lernmethoden des Programmierens!
- Haben Sie Spaß! Je mehr Sie das Programmieren lernen, je mehr Spaß werden Sie haben. Sollte es Ihnen zwischendurch keinen Spaß mehr machen, geben Sie mir sofort Bescheid!
Viel Erfolg! Und viel Spaß!
Organisatorisches¶
Der Plan zur Durchführung der Veranstaltung ist derzeit wie folgt:
- Themen werden ausführlich in der Vorlesung vorgestellt und in diesem Skript beschrieben.
- Die neuen Themen werden stets vorab in diesem Skript hier veröffentlicht. Sie können sich also bereits vorab mit dem jeweiligen neuen Thema beschäftigen.
- Zusammen mit dem Skript (das neue Thema) werden sowohl die dazugehörige Übung als auch die dazugehörige Aufgabe hochgeladen.
- Die beiden Übungen am Dienstag (in der einen Woche) und am Montag in der folgenden Woche sind jeweils gleich (d.h. dort werden die gleichen Übungsaufgaben gelöst). Die Übungen behandeln den Stoff, der am Montag und Dienstag in der gleichen Woche besprochen wird.
- Sie können frei wählen, welche der beiden Übungen Sie besuchen. Sie können auch beliebig wöchentlich wechseln.
- Es wird ein Tutorium angeboten. Unsere Tutorin ist Lucija und das Tutorium ist immer mittwochs um 14 Uhr in C 639. Das erste Tutorium findet am 21.10.2026 statt.
- Sollten Sie Wünsche haben, diesen Plan zu ändern, kommen Sie gerne auf mich zu.
Zur erfolgreichen Durchführung der Veranstaltung müssen Sie
- eine der Übungen durchgeführt haben (zu zweit) und (siehe dazu Wiki in Moodle)
- die Klausur am Ende bestanden
haben.
Jede Woche gibt es zu jedem Thema Übungen, die wir in den Übungszeiten besprechen. Diese dienen der Anwendung und der Festigung der erlangten Kenntnisse. Die Übungen sind kleine Aufgaben, an denen Sie das neue Wissen anwenden sollen. Die Übungen dienen der Befähigung, die (größeren) Aufgaben lösen zu können.
Es gibt außerdem Aufgaben. Diese sind zu Ihrer eigenen Übung da. Es mag Ihnen vielleicht schwerfallen, die Aufgaben selbständig zu lösen. Sie sollten Sie jedoch irgendwann selbständig lösen können!
Success
Es hat sich gezeigt, dass die Studentinnen, die die Aufgaben zum Klausurzeitpunkt selbständig lösen konnten, die Klausur sicher bestehen.
Damit Sie dies erfolgreich erledigen können, ist jeweils angegeben, welche Themen Sie dafür durcharbeiten müssen. Das Durcharbeiten der jeweiligen Themen entspricht meistens jeweils einem Wochenthema.
Am Ende des Semesters schreiben wir eine Klausur (am Rechner). Diese Klausur wird bewertet und entspricht der Note für "Programmieren 1". Probeklausuren (Klausuren aus den letzten Jahren) finden Sie hier.
Für die Kommunikation untereinander verwenden wir Element (Channel #b11_prog1_wise_26). Dort können Sie alle inhaltlichen und organisatorischen Fragen stellen. Ich fände es gut, wenn eine Art internes Diskussionsforum entsteht. Es ist sehr gewünscht, dort Fragen zu stellen und noch mehr gewünscht, dass Sie sich diese gegenseitig beantworten. Damit wäre allen geholfen und wir können besser erkennen, wo noch Nachhol- bzw. Erläuterungsbedarf bei den meisten besteht. Bei Bedarf beantworten die Lehrenden die Fragen natürlich.
Planung¶
Nachfolgend der vorläufige Wochenplan (wird eventuell angepasst).
Code aus der Vorlesung¶
Vorlesung Datentypen 13. + 19.10.2026
package vorlesungen.vorlesung1013;
public class MeineErsteKlasse
{
public static void main(String[] args)
{
System.out.println("Hallo 1!");
System.out.println();
System.out.print("Hallo 2!");
System.out.println("Hallo 3!");
System.out.println();
String wort1; // die Variable wort1 als String deklariert
wort1 = "Hallo FIW!"; // Wertzuweisung
System.out.println( wort1 );
System.out.println( "Hallo FIW!" );
System.out.println( wort1 + wort1 );
String wort2;
String wort3;
wort2 = "Hallo";
wort3 = "FIW";
String leerzeichen;
leerzeichen = " ";
System.out.println(wort2 + leerzeichen + wort3 + "!");
// Datentyp int
int ganzeZahl = 5;
System.out.println( ganzeZahl ); // 5
ganzeZahl = 6;
System.out.println( ganzeZahl ); // 6
ganzeZahl = 5 + 6;
System.out.println( ganzeZahl ); //11
System.out.println( "ganzeZahl = " + ganzeZahl );
System.out.println( ganzeZahl + " = ganzeZahl" );
System.out.println("1 + 2 = " + 1 + 2 ); // 1 + 2 = 12
System.out.println("1 + 2 = " + (1 + 2) ); // 1 + 2 = 3
// Datentypen short und byte
short kleineZahl = 30001;
System.out.println(kleineZahl);
byte nochKleinereZahl = -125;
System.out.println( nochKleinereZahl );
// Datentyp long
long grosseZahl = 2147483648L;
System.out.println(grosseZahl);
// Datentyp char
char zeichen = 'a';
System.out.println(zeichen);
zeichen = 66;
System.out.println(zeichen);
// Datentyp boolean
boolean wahrheitswert = true;
wahrheitswert = false;
// Datentypen double und float
double gebrocheneZahl = 5.123;
float eineFloatZahl = 1.234f;
System.out.println("eins " + "zwei");
System.out.println("jetzt aber " + wort1);
System.out.println("jetzt aber " + "Hallo FIW!");
wort1 = "neuer Wert"; System.out.println("jetzt aber " + wort1);
// das ist ein Zeilenkommentar
// Kommentare werden nicht compiliert
// Zeilenkommentar
/*
* das ist ein Blockkommentar
* der geht ueber mehrere Zeilen
* Kommentare werden nicht compiliert
*/
}
}
Vorlesung arithmetische Ausdrücke 20.10.2026
package vorlesungen.vorlesung1020;
public class Vorlesung1020
{
public static void main(String[] args)
{
int zahl1 = 15;
int zahl2 = 6;
int summe = zahl1 + zahl2;
System.out.println(zahl1 + " + " + zahl2 + " = " + summe);
int differenz = zahl1 - zahl2;
System.out.println(zahl1 + " - " + zahl2 + " = " + differenz);
int produkt = zahl1 * zahl2;
System.out.println(zahl1 + " * " + zahl2 + " = " + produkt);
int quotient = zahl1 / zahl2;
System.out.println(zahl1 + " / " + zahl2 + " = " + quotient);
int rest = zahl1 % zahl2;
System.out.println(zahl1 + " % " + zahl2 + " = " + rest);
double nr1 = 15.0;
double nr2 = 6.0;
double quot = nr1 / nr2;
System.out.println(nr1 + " / " + nr2 + " = " + quot);
double result = 15 / 6; // 2.0
}
}
Vorlesung logische und Vergleichsoperatoren 26.10.2026
package vorlesungen.vorlesung1026;
public class Vorlesung1026
{
public static void main(String[] args)
{
/*
* Arithmetische Operatoren
*/
int a = 2;
int b = 3;
int result = a + b;
System.out.println("result = " + result); // 5
a = 5;
System.out.println("result = " + result); // 5
result = a + b;
System.out.println("result = " + result); // 8
result = result + 1;
System.out.println("result = " + result); // 9
result = result * 3;
System.out.println("result = " + result); // 27
result *= 3; // exakt wie Zeile 22
System.out.println("result = " + result); // 81
result /= 3;
System.out.println("result = " + result); // 27
result++; // identisch mit result = result + 1;
// identisch mit result += 1;
System.out.println("result = " + result); // 28
result--; // identisch mit result = result - 1;
// identisch mit result -= 1;
System.out.println("result = " + result); // 27
result = 2 + 3 * 4; // 14
result = (2 + 3) * 4; // 20
double d1 = 4.5;
double d2 = 5.0;
double ergebnis = d1 * d2;
System.out.println("ergebnis = " + ergebnis);
// ergebnis ist double
ergebnis = 62 / 4; // ganzzahlige Division!!!
System.out.println("ergebnis = " + ergebnis); // 15.0
ergebnis = 62.0 / 4; // Gleikommadivision
System.out.println("ergebnis = " + ergebnis); // 15.5
// result ist int
result = 62 / 4;
System.out.println("result = " + result); // 15
// result = 62.0 / 4; // Compilerfehler double nach int
/*
* Vergleichsoperatoren
*/
boolean vergleich = a > b; // 5 > 3
System.out.println("vergleich ist " + vergleich); // true
vergleich = a < b;
System.out.println("vergleich ist " + vergleich); // false
vergleich = 3 < 3; // false (echt kleiner)
vergleich = 3 <= 3; // true (kleiner oder gleich)
vergleich = 3 > 3; // false (echt groesser)
vergleich = 3 >= 3; // true (groesser oder gleich)
vergleich = 3 == 3; // true (Gleichheit)
vergleich = 3 == 4; // false
vergleich = 3 != 3; // false (Ungleichheit)
vergleich = 3 != 4; // true
/*
* Logische Operatoren
*/
boolean wahrheitswert = true;
wahrheitswert = !wahrheitswert; // negation
wahrheitswert = true && true; // true (Und)
wahrheitswert = true || false; // true (Oder)
wahrheitswert = true ^ true; // false (exklusives Oder)
a = 3;
b = 4;
int c = 5;
wahrheitswert = (a < b) && (b < c);
}
}
Vorlesung Methoden 27.10.2026
package vorlesungen.vorlesung1027;
public class Vorlesung1027
{
public static void addieren(int zahl1, int zahl2)
{
int summe = zahl1 + zahl2;
System.out.println(zahl1 + " + " + zahl2 + " = " + summe);
}
public static int berechneSumme(int zahl1, int zahl2)
{
int summe = zahl1 + zahl2;
return summe;
}
public static void main(String[] args)
{
int nr1 = 16;
int nr2 = 15;
int summe = nr1 + nr2;
System.out.println(nr1 + " + " + nr2 + " = " + summe);
nr1 = -16;
nr2 = 10;
summe = nr1 + nr2;
System.out.println(nr1 + " + " + nr2 + " = " + summe);
nr1 = 7;
nr2 = -8;
summe = nr1 + nr2;
System.out.println(nr1 + " + " + nr2 + " = " + summe);
addieren(43,42);
addieren(-43,42);
addieren(-43,-42);
addieren(nr1, nr2);
addieren(1+3, 2+4);
nr1 = -16;
nr2 = 10;
summe = berechneSumme(nr1, nr2);
System.out.println(nr1 + " + " + nr2 + " = " + -6);
System.out.println(nr1 + " + " + nr2 + " = " + summe);
System.out.println(nr1 + " + " + nr2 + " = " + berechneSumme(nr1, nr2));
double dTest = berechneSumme(89, 67);
}
}
Vorlesung Selektion 2.11.2026
package vorlesungen.vorlesung1102;
public class Vorlesung1102
{
public static boolean istGerade(int zahl)
{
boolean even = (zahl % 2 == 0);
return even;
}
public static boolean istUngerade(int zahl)
{
return !istGerade(zahl);
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
int number = 3;
System.out.println("ist " + number + " gerade ? " + istGerade(number));
System.out.println("ist " + number + " gerade ? " + istGerade(3));
System.out.println("ist " + number + " ungerade ? " + istUngerade(number));
// Selektion
if(5 < 4)
{
System.out.println("Bedingung ist true");
}
else
{
System.out.println("Bedingung ist false");
}
if(istGerade(number))
{
System.out.println(number + " ist eine gerade Zahl");
}
else
{
System.out.println(number + " ist eine ungerade Zahl");
}
char c = 'a';
if(c >= '0' && c <= '9')
{
System.out.println(c + " ist eine Ziffer ");
}
else
{
System.out.println(c + " ist keine Ziffer ");
}
int jahr = 2100;
if( (jahr % 4 == 0 && jahr % 100 != 0) || (jahr % 400 == 0) )
{
System.out.println(jahr + " ist ein Schaltjahr.");
}
else
{
System.out.println(jahr + " ist kein Schaltjahr.");
}
if( jahr % 4 == 0 )
{
// durch 4 teilbar
if( jahr % 100 == 0)
{
// durch 4 UND durch 100 teilbar
if( jahr % 400 == 0)
{
// durch 4 UND durch 100 UND durch 400 teilbar
System.out.println(jahr + " ist ein Schaltjahr.");
}
else
{
// durch 4 UND durch 100 aber nicht durch 400 teilbar
System.out.println(jahr + " ist kein Schaltjahr.");
}
}
else
{
// durch 4 aber nicht durch 100 teilbar
System.out.println(jahr + " ist ein Schaltjahr.");
}
}
else
{
// nicht durch 4 teilbar
System.out.println(jahr + " ist kein Schaltjahr.");
}
int a = 3;
int b = 3;
if(a > b)
{
System.out.println( a + " > " + b );
}
else // b > a oder b == a
{
if(b > a)
{
System.out.println( a + " < " + b );
}
else // b == a
{
System.out.println( a + " == " + b );
}
}
}
}
Vorlesung Iteration 3.11.2026
package vorlesungen.vorlesung1103;
public class Vorlesung1103
{
public static void computeSumFrom1ToN(int n)
{
int sum = 0;
String s = "1";
for(int i=1; i<=n; i++)
{
if(i>1)
{
s += " + " + i;
}
sum = sum + i;
System.out.println(s + " = " + sum);
}
}
public static void irgendetwas(int nr1, int nr2)
{
if(nr1 < 0)
nr1 = -nr1; // Anweisung(sblock) des true-Zweiges
nr1++; // wird immer ausgefuehrt!!
// ohne else
if(nr2 < 0)
{
nr2 = -nr2;
}
// ohne else
System.out.println("nr1 = " + nr1 + ", nr2 = " + nr2);
}
public static boolean istGerade(int zahl)
{
return (zahl % 2 == 0);
}
public static void main(String[] args)
{
int a = 48;
int b = 16;
if(a > b)
{
a = a - b;
irgendetwas(a, b);
}
else
{
b = b - a;
}
int n = 5;
//if(n % 2 == 0)
if(istGerade(n))
{
n = n / 2;
}
else
{
n = 3 * n + 1;
}
irgendetwas(3,4);
irgendetwas(-3, 4);
irgendetwas(3, -4);
irgendetwas(-3, -4);
/*
* Iteration for-Schleife
*/
for(int i = 1; i < 5; i++)
{
System.out.println("i = " + i);
}
System.out.println("for-Schleife zu Ende");
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 2; j++)
{
System.out.println("i = " + i + ", j = " + j);
}
System.out.println("--------------");
}
for(int zeile = 0; zeile < 10; zeile++)
{
for(int spalte = 0; spalte < zeile; spalte++)
{
System.out.print("* ");
}
System.out.println();
}
computeSumFrom1ToN(20);
}
}
Vorlesung Iteration (for) 9.11.2026
package vorlesungen.vorlesung1109;
public class Vorlesung1109
{
public static void printNChars(int n, char c)
{
for( int i = 1 ; i <= n ; i++ )
{
System.out.print(c);
}
//System.out.println();
}
public static int sumOf1ToN(int n)
{
int summe = 0;
for(int summand = 1; summand <= n; summand++)
{
summe = summe + summand;
}
return summe;
}
public static void printFakultaet(int n)
{
long produkt = 1;
System.out.print(n + "! = ");
for(int faktor = 1 ; faktor <= n; faktor++)
{
if(faktor < n)
{
System.out.print(faktor + " * ");
}
else
{
System.out.print(faktor + " = ");
}
produkt = produkt * faktor;
}
System.out.println(produkt);
}
public static void main(String[] args)
{
int n = 5;
for( int i = 1 ; i <= n ; i++ )
{
System.out.print('+');
}
// System.out.println(i); // i existiert nicht ausserhalb for
System.out.println();
printNChars(10, '*');
printNChars(1, '-');
printNChars(-10, 'x');
printNChars(30, 'z');
System.out.println();
n = 10;
for( int i = 1 ; i < n ; i++ )
{
System.out.print("i = " + i + " : ");
printNChars(n-i, ' ');
printNChars(i, '*');
System.out.println();
}
for(int i = 1; i < 10; i++)
{
int summe = sumOf1ToN(i);
System.out.println("Summe 1 bis " + i + " = " + summe);
}
System.out.println();
printFakultaet(6);
printFakultaet(10);
for(int i = 1; i < 18; i++)
{
printFakultaet(i);
}
}
}
Vorlesung Iteration (while) 10.11.2026
package vorlesungen.vorlesung1110;
public class Vorlesung1110
{
public static double powerOf2(int n)
{
double number = 1;
boolean negativ = true;
if(n < 0)
{
negativ = true;
n = -n;
}
else
{
negativ = false;
}
for(int exp = 1; exp <= n; exp++)
{
number = number * 2;
}
if(negativ)
{
number = 1 / number;
}
return number;
/*
if(n > 0)
{
for(int exp = 1; exp <= n; exp++)
{
number = number * 2;
}
}
else
{
for(int exp = n; exp<0 ; exp++)
{
number = number / 2;
}
}
return number;
*/
}
public static int method1(int i)
{
i = i + 1;
return i;
}
public static void main(String[] args)
{
int exp = -3;
double result = powerOf2(exp);
System.out.println("2^" + exp + " = " + result);
int j = 3;
j = method1(j) * 4;
System.out.println(j);
int a = 48;
int b = 32;
while(a != b)
{
if(a > b)
{
a = a - b;
}
else
{
b = b - a;
}
}
System.out.println(a + " == " + b);
int n = 10;
int i = 1;
while(i <= n)
{
System.out.println(i);
i++;
}
n = 7;
System.out.print(n + " ");
while(n>1)
{
if(n % 2 == 0)
{
n = n / 2;
}
else
{
n = 3 * n + 1;
}
System.out.print(n + " ");
}
}
}