Objektorientierte Programmierung: 2. Übung
Wiederholungs-Fragen zu Kapitel 0: Organisatorisches
- Weiß jeder, wo es die Vorlesungs-Folien gibt?
- Sind die Regeln für die Programmier-Testate klar?
Das erste ist in der Woche vom 5./6. November,
also nächste Woche.
- Bis zu 5 Seiten Notizen sind erlaubt,
wahrscheinlich sollte man sich wenigstens eine Seite machen
(noch gab es ja nicht so viel Stoff).
Was sollte darauf stehen?
- Sind die Regeln für die Hausaufgaben klar?
(Hinweis: Man braucht 50% der Hausaufgabenpunkte
UND 50% der Punkte für die Programmiertestate.)
Wiederholungs-Fragen zu Kapitel 1: Einführung
- Was ist die Aufgabe des Hauptspeichers (RAM) eines Rechners?
Was sind die beiden wesentlichen Operationen?
Was sind die Speichereinheiten?
Was für Daten stehen im Hauptspeicher?
-
- Was sind Unterschiede zwischen Hauptspeicher und Platte?
Was sind Dateien?
- Was ist die Aufgabe eines Editors?
Welchen Editor haben Sie?
- Was macht eine CPU?
Was sind die wichtigsten Komponenten?
Nennen Sie ein paar typische Maschinenbefehle.
- Warum programmiert man besser in Java
als in Maschinensprache?
- Was macht ein Compiler?
- Was ist ein Algorithmus?
Was ist Quellcode?
Was ist ein ausführbares Programm?
Welche Beziehungen gibt es zwischen den drei Begriffen?
- Welche Vor- und Nachteile hat es,
Java in den Code einer abstrakten Maschine zu compilieren,
und nicht in den Maschinencode der tatsächlichen Hardware?
- Wofür steht die Abkürzung JDK?
Wo kann man sich das herunterladen?
Wer hat sich das JDK installiert?
Gab es dabei Schwierigkeiten?
- Wofür steht "JRE"?
Was ist der Unterschied zum "JDK"?
- Was sind Entwicklungsumgebungen?
Wer hat sich Eclipse installiert? Netbeans? BlueJ?
- Angenommen,
das "Hello World" Programm steht in der Datei "Hello.java"
(mit der Klasse Hello).
Was sind die Konsolenbefehle,
um das Programm auszuführen?
- Was ist ein Syntaxfehler?
- Ist die Stelle,
an der der Compiler einen Syntaxfehler meldet,
auch die Stelle,
wo der Fehler tatsächlich ist?
Wenn nein, wo könnte der Fehler sonst sein?
- Warum kann es nützlich sein,
dass der Compiler mehr als einen Fehler meldet?
Was ist ein Folgefehler? Wie kommt es dazu?
- Was kann man tun,
wenn man die Fehlermeldung nicht versteht?
- Warum ist es so wichtig,
jeden Fehler vollständig aufzuklären?
Was sollte man dazu tun?
Wiederholungs-Fragen zu Kapitel 2:
Erste Schritte in der Programmierung (bis Folie 68)
- Versuchen Sie sich,
an das "Hello World" Programm zu erinnern.
An welche Komponenten erinnern Sie sich noch?
- Was bedeutet es,
dass Java eine formatfreie Sprache ist?
- Wofür werden Bezeichner ("Identifier")
in Java benutzt?
Wie sind Bezeichner aufgebaut?
- Was sind Schlüsselworte ("reservierte Worte")
einer Programmiersprache?
Was ist die Beziehung zu Bezeichnern?
Welche Schlüsselworte und welche Bezeichner
kommen im "Hello World" Programm vor?
- Was sind Datentypen?
Erläutern Sie die Datentypen int und double.
- Warum sind führende Nullen in Zahlkonstanten problematisch?
Was bedeutet z.B. 010 in Java?
- Schreibt man in Java "1.2" oder "1,2"
(d.h. was ist das richtige "Komma" für Dezimalzahlen)?
- Warum ist es etwas problematisch,
den Datentyp "double" einfach als "reele Zahlen" zu verstehen?
- Was ist das Ergebnis von "25/10" in Java?
- Welches Symbol wird in Java für die Berechnung des Divisionsrests
verwendet?
- Wenn man zwei ganze Zahlen, z.B. 25,
normal mathematisch dividieren will
(also mit Ergebnis vom Typ "double"),
wie kann man das machen?
- Kennt Java die Regel "Punktrechnung vor Strichrechnung"?
Geben Sie ein Beispiel einer Ausgabeanweisung,
mit der man das prüfen könnte.
- Wie heisst die Funktion für die Wurzel (Quadratwurzel)
in Java?
Zu welcher Klasse gehört sie?
Schreiben Sie eine Ausgabeanweisung,
die die Wurzel aus 2 druckt.
- Mit welchem Operator kann man Zeichenketten in Java
konkatenieren (d.h. "aneinander hängen")?
- Was ist eine Variable?
Was kann man damit tun?
Welche Daten speichert der Compiler über Variablen in Java?
- Was ist ein Wertausdruck (engl. "Expression")?
Geben Sie mindestens drei deutlich verschiedene Beispiele
für Wertausdrücke.
- Wie schreibt man in Java eine Variablendekaration?
- Wie schreibt man in Java eine Zuweisung (engl. "Assigment")?
- Was ist ein Kommentar?
Wie schreibt man Kommentare in eine Java-Programm?
Besprechung der Hausaufgaben
- Was waren die Lernziele?
- Korrekte Lösungen zeigen,
ggf. verschiedene Alternativen.
- Schwierigkeiten besprechen
- Fragen beantworten
Programmieraufgabe: Quadratische Gleichung lösen
- Das Programm soll eine quadratische Gleichung
a*x2 + b*x + c = 0
lösen,
d.h. die Nullstellen der Parabel bestimmen.
- Es sollen also erst die drei Zahlen a, b, c eingelesen werden.
Da das in der Vorlesung noch nicht besprochen wurde,
ist das Rahmenprogramm zum Einlesen der Zahlen vorgegeben.
- Die p-q-Formel ist für quadratische Gleichungen der Form:
x2 + p*x + q = 0
Man muss die obige Gleichung also zunächst in diese Form
überführen,
indem man beide Seiten durch a teilt.
Sie können zur Vereinfachung annehmen,
dass a nicht 0 ist.
- Die p-q-Formel finden Sie z.B. auf
formelsammlung-mathe.de
oder (mit viel mehr Erklärungen)
in der Wikipedia.
Sie sollte ja auch noch aus der Schule bekannt sein.
Die obige Gleichung hat die Lösungen
"x1 = -(p/2)+SQRT((p/2)^2-q)"
und
"x2 = -(p/2)-SQRT((p/2)^2-q)".
Den Operator "^" für "hoch" gibt es in Java nicht,
aber quadrieren kann man natürlich auch,
indem man den Wert einfach mit sich selbst multipliziert.
- Sie sollen zunächst den Wert unter der Wurzel berechnen
und in einer Variablen "unter_wurzel" speichern.
Nun sind drei Fälle zu unterscheiden.
Wenn dieser Wert negativ ist,
gibt es keine Lösung.
Wenn der Wert 0 ist,
gibt es nur eine Lösung.
Wenn der Wert positiv ist,
gibt es zwei Lösungen.
Da Fallunterscheidungen in der Vorlesung noch nicht dran waren,
ist dieser Teil des Programms wieder vorgegeben.
Sie müssen aber jeweils zwischen den "{...}"
die die richtige Lösung drucken.
- Wenn Sie wollen,
können Sie Ihr Programm auch noch so erweitern,
dass es eine Probe macht,
also den Wert des Polynoms für die gefundenen Nullstellen
ausgibt.
Aufgrund von Rundungsfehlern ist es vielleicht nicht
ganz exakt 0,
sollte aber sehr nahe bei 0 liegen.
- Das Programm, mit dem Sie starten können,
steht hier: PQFormel.java.
Sie müssen die fehlenden Teile passend ergänzen.
- Testfälle z.B.:
- 2x2 - 4x +2 = 0:
Dies ist 2*(x-1)2,
daher gibt es nur eine Nullstelle x=1.
- 3x2 + 3x - 18 = 0:
Dies ist 3*(x-2)(x+3).
Daher gibt es zwei Nullstellen x1 = 2
und x2 = -3.
- x2 + 2x + 2 = 0:
Dies ist (x+1)2 + 1
und hat gar keine Nullstelle.