FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

SE1 Klausur

SE1 Klausur 2008-02-28 18:05
Fred
Heute war doch SE1 Klausur, wenn mich nicht alles täuscht. Wie lief es denn so?

RE: SE1 Klausur 2008-02-28 18:05
Anonymer User
SCHEISSE

RE: SE1 Klausur 2008-02-28 18:06
VincentVega
War ok!

RE: SE1 Klausur 2008-02-28 18:07
Anonymer User
Ging so

RE: SE1 Klausur 2008-02-28 18:13
JimiHendrix
für die Cracks sicherlich einfach, aber für den Großteil genau das richtige Niveau.
Ich fand es ne gute Mischung aus einfachen Fragen("Wie viele Parameter hat folgende Methode?") und Fragen wo man schon knobeln musste..die Klausur hat das Niveau der ganzen Lehrveranstaltung wiedergespiegelt und das war meiner Meinung nach sehr gut :-)

RE: SE1 Klausur 2008-02-28 18:19
Anonymer User
ein idiot names felix wurde disqualifiziert .. so ein spacken

RE: SE1 Klausur 2008-02-28 18:44
Fred
Was muss man denn tun, um disqualifiziert zu werden?

RE: SE1 Klausur 2008-02-28 18:45
Marrow
Abschreiben beim Vordermann?

RE: SE1 Klausur 2008-02-28 18:52
Fred
Dazu sitzen die Leute meistens zu weit voneinander weg. Ich tippe auf was anderes. Vielleicht nebenbei telefoniert oder gesurft?

RE: SE1 Klausur 2008-02-28 19:26
Julian F.
Ich fand sie teilweise unerwartet schwierig, zumindest einige Fragen. War wohl doch nix mit der geschenkten Bestnote - mal sehen was nun draus wird. :)

Eine Sache die mir unangenehm aufgefallen ist (und die ich auch auf den Feedbackbogen geschrieben habe): In der Veranstaltung und in den Übungen wurden wir (man korrigiere mich wenn ich mich täusche) darauf hingewiesen, dass es am besten sei, Variablen und Arrays immer selbst zu initialisieren und nicht davon auszugehen, dass die direkt nach der Deklaration automatisch mit 0 initialisiert sind. Die Situation, eine Variable zu benutzen ohne sie zu initialisieren, sollte deshalb gar nicht erst auftreten (und wird ja auch im Normalfall vom Compiler als Warnung angemerkt).

In der Klausur kamen aber mehrere Fragen (drei, vier?) für deren vollständige Beantwortung man genau das wissen musste. Es gab z.B. folgenden Code:

int[] intArray = new int[5]; for(int i : intArray) { i = 42; } int j = intArray[0];Unter den Antworten, die hier anzukreuzen waren, sollte gewesen sein (nochmal: korrigiert mich wenn ich etwas falsch wiedergebe):

[x] Nach Ausführung dieser Zeilen hat j den Wert 0.

(Noch mal explizit für alle Zweifler und Nicht-Hinterher-Ausprobierer: Der Array wird wirklich nicht mit 42 gefüllt.) Das ist schön und gut und sicher auch sinnvoll zu wissen, aber wurde nicht immer gesagt, dass wir uns darauf eben nicht verlassen sollen?

Ansonsten gab's teilweise problematische Formulierungen… Es wurde gefragt, ob die Einhaltung der Quelltextkonventionen sowie ein paar andere Dinge "zur Übersetzungszeit eindeutig bestimmbar bzw. relevant" sind. Was soll dieses "relevant" mir sagen? Wenn man es weglässt kreuzt man letztendlich dasselbe an, was nun hoffentlich richtig ist. Auf meine Nachfrage wurde mir gesagt, dass das "bzw." in diesem Fall als "oder" zu verstehen war. Ich hatte deshalb gezweifelt, da Quelltextkonventionen für die Übersetzung ja gerade nicht relevant sind.

Es gab noch ein paar Fragen bei denen ich Bauchschmerzen mit den Formulierungen hatte, aber die fallen mir jetzt natürlich nicht mehr ein. Macht wieder jemand ein Gedächtnisprotokoll? Ich fürchte ich bin dafür ungeeignet. ;)

RE: SE1 Klausur 2008-02-28 20:04
Fred
In der Veranstaltung und in den Übungen wurden wir (man korrigiere mich wenn ich mich täusche) darauf hingewiesen, dass es am besten sei, Variablen und Arrays immer selbst zu initialisieren
In Bezug auf Variablen gebe ich Dir Recht. Aber wurde das bezogen auf Arrays wirklich so gesagt? Wie sähe eine solche Initialisierung eines Arrays aus?

Die Situation, eine Variable zu benutzen ohne sie zu initialisieren, sollte deshalb gar nicht erst auftreten (und wird ja auch im Normalfall vom Compiler als Warnung angemerkt).
Nein. Eine Exemplarvariable kannst Du deklarieren, ohne sie explizit zu initialisieren, weil sie implizit mit einem Standardwert initialisiert wird, bevor der eigentliche Konstruktor durchläuft. Da warnt der Compiler nicht.

Lokale Variablen brauchst Du auch nicht bei der Deklaration zu initialisieren (ist aber guter Stil - da sind wir wieder beim Begriff "Pragmatik"), Du MUSST sie allerdings vor dem ersten Lesen beschreiben (siehe "definite assignment" in der JLS). Wenn der Compiler sieht, dass Du eine unbeschriebene Variable ausliest, bekommst Du einen FEHLER, keine Warnung.

Man kann also in Java niemals und unter keinen Umständen irgendwelche Müllwerte aus Variablen auslesen.

(Noch mal explizit für alle Zweifler und Nicht-Hinterher-Ausprobierer: Der Array wird wirklich nicht mit 42 gefüllt.) Das ist schön und gut und sicher auch sinnvoll zu wissen, aber wurde nicht immer gesagt, dass wir uns darauf eben nicht verlassen sollen?
Du kannst Dich darauf verlassen, dass Array-Elemente beim Erzeugen des Arrays mit default-Werten gefüllt werden. Das steht auf Folie 13 des vierten Skriptteils. Man KANN auch die Werte explizit in einem Array-Initializer hinschreiben:

int[] intArray = {0,0,0,0,0}
aber das scheint mir sinnlos, dort nur default-Werte reinzuschreiben, die ja sowieso angelegt würden… außerdem musst Du aufpassen, dass Du Dich nicht bei der Anzahl der Elemente vertust. new int[ 5 ] finde ich einfacher zu lesen.
(Unabhängig von dieser konkreten Aufgabe mit fünf Elementen funktionieren statische Array-Initialisierer natürlich nur, wenn die Anzahl der Elemente zur Übersetzungszeit bekannt ist.)

Die Sache mit der nicht zugewiesenen 42 hast Du aber gut erkannt, und darum ging es ja in dieser Aufgabe [23]

Es wurde gefragt, ob die Einhaltung der Quelltextkonventionen sowie ein paar andere Dinge "zur Übersetzungszeit eindeutig bestimmbar bzw. relevant" sind. Was soll dieses "relevant" mir sagen? […] Ich hatte deshalb gezweifelt, da Quelltextkonventionen für die Übersetzung ja gerade nicht relevant sind.
Für die Übersetzung sind die Konventionen egal. Aber es geht nicht um die Übersetzung, sondern um die Übersetzungszeit (als Abgrenzung zur Laufzeit). "Zur Übersetzungszeit" heißt, dass man sich den ausgedruckten Quelltext anschaut, da ein bischen mit Bleistift rummalt und zu tollen Erkenntnissen kommt [23]

RE: SE1 Klausur 2008-02-28 20:22
Julian F.
In Bezug auf Variablen gebe ich Dir Recht. Aber wurde das bezogen auf Arrays wirklich so gesagt? Wie sähe eine solche Initialisierung eines Arrays aus?
Mag sein, dass es bei Arrays nicht in der Form gesagt wurde, dann irre ich mich da. Ein Array lässt sich z.B. mit einer for-Schleife sehr gut mit einem bestimmten Wert füllen.

Nein. Eine Exemplarvariable kannst Du deklarieren, ohne sie explizit zu initialisieren, weil sie implizit mit einem Standardwert initialisiert wird, bevor der eigentliche Konstruktor durchläuft. Da warnt der Compiler nicht.

Lokale Variablen brauchst Du auch nicht bei der Deklaration zu initialisieren (ist aber guter Stil - da sind wir wieder beim Begriff "Pragmatik"), Du MUSST sie allerdings vor dem ersten Lesen beschreiben (siehe "definite assignment" in der JLS). Wenn der Compiler sieht, dass Du eine unbeschriebene Variable ausliest, bekommst Du einen FEHLER, keine Warnung.

Man kann also in Java niemals und unter keinen Umständen irgendwelche Müllwerte aus Variablen auslesen.
Nehmen wir mal die Frage die direkt über der von eben stand:
int[] intArray; // hier noch mehr Zeug glaub ich int i = intArray[0];Was passiert dann hier? Ich habe angekreuzt "Es wird eine Exception geworfen" (da kein Array-Objekt existiert). Hat i danach einen definierten Wert oder bringt die Exception sowieso alles zum Erliegen?

Für die Übersetzung sind die Konventionen egal. Aber es geht nicht um die Übersetzung, sondern um die Übersetzungszeit (als Abgrenzung zur Laufzeit). "Zur Übersetzungszeit" heißt, dass man sich den ausgedruckten Quelltext anschaut, da ein bischen mit Bleistift rummalt und zu tollen Erkenntnissen kommt [23]
Heißt es das wirklich immer? Das war mir nicht klar. Ich dachte, mit "Übersetzungszeit" wäre der Zeitpunkt/Zeitraum gemeint, in dem der Code vom Compiler übersetzt wird - denn in dem Moment/Zeitraum ist die Lesbarkeit des Quelltextes ja tatsächlich irrelevant. (Angekreuzt habe ich's halt trotzdem, da's ja trotzdem eindeutig bestimmbar ist). Vielleicht liegt das also wirklich nur an meiner Interpretation der Frage. Selbst als Informatik-Erstsemester lernt man noch was neues. ;)

RE: SE1 Klausur 2008-02-28 20:47
Fred
Nehmen wir mal die Frage die direkt über der von eben stand:
int[] intArray; // hier noch mehr Zeug glaub ich int i = intArray[0];Was passiert dann hier? Ich habe angekreuzt "Es wird eine Exception geworfen" (da kein Array-Objekt existiert). Hat i danach einen definierten Wert oder bringt die Exception sowieso alles zum Erliegen?
Solange in "// hier noch mehr Zeug glaub ich" kein Array erzeugt und i zugewiesen wird, hast Du Recht, es wird eine Exception geworfen. Ein "danach" gibt es nicht, man kann also nicht herausfinden, was in i ist. In der JLS wird das mit "abrupt termination" bezeichnet.

"Zur Übersetzungszeit" heißt, dass man sich den ausgedruckten Quelltext anschaut, da ein bischen mit Bleistift rummalt und zu tollen Erkenntnissen kommt [23]
Heißt es das wirklich immer? Das war mir nicht klar. Ich dachte, mit "Übersetzungszeit" wäre der Zeitpunkt/Zeitraum gemeint, in dem der Code vom Compiler übersetzt wird
Nein, damit wird kein Zeitraum beschrieben. "Zur Übersetzungszeit" heißt "statisch anhand des Quelltexts feststellbar", "zur Laufzeit" heißt "erst feststellbar, wenn das Programm läuft."

RE: SE1 Klausur 2008-02-28 22:59
Oliver Bestmann
Nehmen wir mal die Frage die direkt über der von eben stand:
int[] intArray; // hier noch mehr Zeug glaub ich int i = intArray[0];Was passiert dann hier? Ich habe angekreuzt "Es wird eine Exception geworfen" (da kein Array-Objekt existiert). Hat i danach einen definierten Wert oder bringt die Exception sowieso alles zum Erliegen?
Solange in "// hier noch mehr Zeug glaub ich" kein Array erzeugt und i zugewiesen wird, hast Du Recht, es wird eine Exception geworfen. Ein "danach" gibt es nicht, man kann also nicht herausfinden, was in i ist. In der JLS wird das mit "abrupt termination" bezeichnet.

Also soweit ich mich erinnere stand bei // nichts mehr, dem Array wurde auf jedenfall nichts zugewiesen…
Im Prinzip ist die ganze frage sowieso quatsch, es wird auch keine Exception geworfen, weil das ganze sich garnicht kompilieren lässt. Aber gehen wir mal davon aus, intArray sei eine Exemplar-Variable, und int i = intArray[0] machen wir z.B. als erstes im Konstruktor, dann stimm ich dir zu, ein "danach" gibt es nicht… Aber "man kann also nicht herausfinden, was in i ist" finde ich stimmt nicht ganz, weil wir ja durch die Exception den Block verlassen haben und i nicht einmal mehr existiert. Bei dir klingt das so als würde i noch existieren, als hätten wir nur keinen Zugriff drauf

RE: SE1 Klausur 2008-02-29 00:09
Fred
Im Prinzip ist die ganze frage sowieso quatsch, es wird auch keine Exception geworfen, weil das ganze sich garnicht kompilieren lässt. Aber gehen wir mal davon aus, intArray sei eine Exemplar-Variable
Hä? intArray ist hier eine ganz normale lokale Variable. Wo soll da das Problem sein?

EDIT: Ah, definite assignment [28]

RE: SE1 Klausur 2008-03-02 22:07
Julian F.
Nein, damit wird kein Zeitraum beschrieben. "Zur Übersetzungszeit" heißt "statisch anhand des Quelltexts feststellbar", "zur Laufzeit" heißt "erst feststellbar, wenn das Programm läuft."
Habe da nun nochmal nachgesehen… Foliensatz 2, Folie 68:
Übersetzungszeit (engl.: compile time) ist die Zeit, in der ein Compiler den in einer Programmiersprache geschriebenen Quelltext in eine ausführbare Form übersetzt.
Das sollte dann vielleicht mal angepasst werden…?

RE: SE1 Klausur 2008-03-02 22:37
Fred
Das Wort kommt schon ursprünglich daher, dass der Compiler das Programm übersetzt. Das hatte ich vielleicht etwas zu radikal ausgedrückt.

Das interessante daran ist ja, dass es Fehler gibt, die der Compiler bemerkt. Und es gibt andere Fehler, die erst zur Laufzeit auftreten. Wenn ein Mensch über solche Fehler redet und die Begriffe "Übersetzungszeit" und "Laufzeit" redet, dann ist der Mensch sozusagen der Compiler [25]

Während der Übersetzungszeit wird das Programm als etwas statisches verstanden - eine Aneinanderreihung von Schlüsselwörtern, Bezeichern, Literalen und Symbolen. Sind die öffnenden Klammern korrekt geschlossen? Stehen die Semikolons (sp?) an den richtigen Stellen?

Während der Laufzeit versteht man das Programm als eine aktive Einheit. Es passiert etwas, es wird etwas berechnet. Es werden Objekte erzeugt. Es gibt z.B. einen Programmzähler und einen Aufrufstack. Solche Dinge existieren während der Übersetzungszeit gar nicht.

Habe da nun nochmal nachgesehen… Foliensatz 2, Folie 68:
Übersetzungszeit (engl.: compile time) ist die Zeit, in der ein Compiler den in einer Programmiersprache geschriebenen Quelltext in eine ausführbare Form übersetzt.
Hab mir die Folien gerade angesehen. Da steht doch genau das, was ich sagte [25]
Hier sind die statischen Eigenschaften von Programmen relevant:
[Syntax, Sichtbarkeit, Struktur, Lesbarkeit, Konventionen…]

RE: SE1 Klausur 2008-03-02 22:49
Julian F.
Vor diesem Hintergrund sehe ich trotzdem nicht nur deine obige Definition sondern auch die aus dem Skript als nicht optimal, weil unklar. Wenn ich den Satz von den Folien lese denke ich an den Zeitraum, in dem kompiliert wird (bzw. gar an die Dauer, à la "Ich habe über 30s Übersetzungszeit"), und an nichts weiter gefasstes. Aber nochmal: Vielleicht geht das ja nur mir so.

RE: SE1 Klausur 2008-03-02 23:03
Hannes
Hab mir die Folien gerade angesehen. Da steht doch genau das, was ich sagte [25]
Hier sind die statischen Eigenschaften von Programmen relevant:
[Syntax, Sichtbarkeit, Struktur, Lesbarkeit, Konventionen…]

hmm, ich würde quelltextkonventionen nichtmal als eigenschaft des programms bezeichnen. programme können ja auch mit unterschiedlichen quelltextkonventionen äquivalent sein. das ist ja so, als ob es eine eigenschaft eines gemäldes wäre, wenn der malkasten nach goethes farbkreis sortiert ist [28]

da kann man sich natürlich lange drüber streiten, aber quelltextkonventionen in eine schublade mit syntax und struktur zu werfen… nee, das passt irgendwie nicht [25]

RE: SE1 Klausur 2008-03-02 23:08
Fred
Das ist doch nicht das erste Mal, dass ein Begriff in der Informatik mehrere Bedeutungen hat [25]

In computer science, compile time refers to either the operations performed by a compiler (the "compile-time operations") or programming language requirements that must be met by source code for it to be successfully compiled (the "compile-time requirements").

The operations performed at compile time usually include syntax analysis, various kinds of semantic analysis (e.g., type checks and instantiation of template) and code generation.
[…]
"Compile time" can also refer to the amount of time required for compilation.

RE: SE1 Klausur 2008-03-02 23:22
Fred
hmm, ich würde quelltextkonventionen nichtmal als eigenschaft des programms bezeichnen.
Sind Kommentare auch keine Eigenschaft des Programms?

programme können ja auch mit unterschiedlichen quelltextkonventionen äquivalent sein.
Nehmen wir die folgenden Methoden als Beispiel (ich verstehe eine Methode hier als Unterprogramm):

boolean a(int x, int y) {     if (x < y)         return true;     else         return false; } boolean b(int x, int y) {     boolean result;     if (x < y)         result = true;     else         result = false;     return result; } boolean c(int x, int y) {     return x < y ? true : false; } boolean d(int x, int y) {     return x < y; } Diese vier Programme sind grundsätzlich unterschiedlich. Anhänger verschiedener Quelltextkonventionen werden verschiedene Lösungen als optimal bezeichnen. Manche sagen "nur ein return pro Methode", andere sagen "ternary operators are evil" etc.
Es sind verschiedene Programme - aber die Semantik ist gleich. Vielleicht meintest Du das.

quelltextkonventionen in eine schublade mit syntax und struktur zu werfen… nee, das passt irgendwie nicht [25]
Wenn ich Dich frage, ob Person X bei Programm Y die Quelltextkonventionen eingehalten hat, was machst Du dann?

a) Du schaust Dir den Quellcode an
b) Du startest das Programm und wartest, bis es terminiert

RE: SE1 Klausur 2008-03-02 23:22
Julian F.
Das ist doch nicht das erste Mal, dass ein Begriff in der Informatik mehrere Bedeutungen hat [25]
Geschenkt soweit, ergibt alles Sinn. Aber hier schließt sich auch der Kreis zurück zur Klausur: Für die sollte idealerweise die Definition gelten, die im Skript steht. Aber okay, das wird hier zur Erbsenzählerei. :)

RE: SE1 Klausur 2008-03-02 23:25
Fred
hier schließt sich auch der Kreis zurück zur Klausur
Jetzt würde mich natürlich nochmal der genaue Wortlaut der Aufgabe interessieren…

RE: SE1 Klausur 2008-03-02 23:44
Julian F.
Viel bekomme ich da nicht mehr zusammen… die Frage ging etwa in die Richtung: "Welche der folgenden [Eigenschaften von Programmcode? Weiß die Formulierung nicht mehr] sind zur Übersetzungszeit relevant bzw. eindeutig bestimmbar?" (Mehrere Antworten möglich)

Antwortmöglichkeiten waren dann glaube ich eine falsche (irgendwas wie "Wie viele Objekte erzeugt werden"), zwei offensichtlich richtige (an die ich mich leider nicht mehr erinnern kann, ging in Richtung Programmsemantik glaub ich) und eben die mit "Einhaltung der Quelltextkonventionen".

RE: SE1 Klausur 2008-03-03 00:01
Hannes
Sind Kommentare auch keine Eigenschaft des Programms?

nee, würde ich nicht sagen. ohne kommentare fällt es mir zwar schwerer das programm nachzuvollziehen, aber es ist mir trotzdem auf jeden fall möglich.

Diese vier Programme sind grundsätzlich unterschiedlich. Anhänger verschiedener Quelltextkonventionen werden verschiedene Lösungen als optimal bezeichnen. Manche sagen "nur ein return pro Methode", andere sagen "ternary operators are evil" etc.
Es sind verschiedene Programme - aber die Semantik ist gleich. Vielleicht meintest Du das.

okay, dann haben wir wohl unterschiedliche auffassungen von quelltextkonventionen ;) ich meinte sachen wie einrückung, spaces/tabs, in-welche-zeile-kommt-die-klammer, namenskonventionen etc.
die unterschiede zwischen deinen beispielen sind zur übersetzungszeit natürlich relevant.

RE: SE1 Klausur 2008-03-03 09:47
lars
Ich glaub in der Frage ging es darum, was zur Übersetzungszeit feststellbar ist. Und da gehören dann ja auch dinge wie Namenskonventionen, etc dazu.

RE: SE1 Klausur 2008-03-03 10:43
Hannes
okay, feststellbar ist natürlich jedes verschiedene zeichen im quelltext.

RE: SE1 Klausur 2008-03-03 11:50
Anonymer User
kann zufällig jemand sagen wann wir die Klausurergebnisse kriegen werden?
Es wird im Zweifelsfall ja langsam eng mit dem Lernen für den 2. Termin.

RE: SE1 Klausur 2008-03-03 12:40
Fred
kann zufällig jemand sagen wann wir die Klausurergebnisse kriegen werden?

Folgendes steht seit ein paar Tagen im CommSy:
Klausurergebnisse gibt es voraussichtlich nächste Woche, frühestens ab Mittwoch (5.3.).

RE: SE1 Klausur 2008-03-04 18:22
payne
Die Ergebnisse stehen schon im commsy.

RE: SE1 Klausur 2008-03-06 14:18
rothose86
Sag mal, steht bei euch bei STINE im Kalender auch der zweite Klausurtermin von SE1 und IKON,obwohl ihr euch dafür garnicht angemeldet habt?
Bug von STINE?


EDIT:
Zweiter Termin von SE1 steht nun nicht mehr im Kalender. Dürfte wohl damit zusammenhängen dass die Noten nun auch bei STINE eingetragen wurden.
Der zweite Termin von IKON steht nachwievor drin, liegt vielleicht daran dass ich IKON2 nicht mitgeschrieben habe und so das Modul noch nicht abgeschlossen wurde?!?

RE: SE1 Klausur 2008-03-06 23:31
T
STINE […] Kalender
vergiss den kalender. der hinkt der realität immer ein bischen hinterher.