Klausur zur Lehrveranstaltung Technische Informatik für Ingenieure

Werbung
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Klausur zur Lehrveranstaltung
Technische Informatik für Ingenieure
WS 2005/06
21. Februar 2006
Aufgabe
mögliche Punkte
1
2
3
4
5
Summe
15
15
20
25
15
90
erreichte Punkte
Note:
Hinweise:
• Diese Klausur umfaßt 5 Aufgaben und 10 Seiten.
• Überprüfen Sie Ihre Klausur bitte auf Vollständigkeit!
• Schreiben Sie bitte Ihren Namen auf jede Seite dieser Klausur und ggf. auf
weitere von Ihnen benutzte Zusatzblätter!
• Es sind keine Hilfsmittel erlaubt.
• Nehmen Sie sich Zeit, die Klausuraufgaben vollständig durchzulesen.
• Sie können insgesamt 90 Punkte erreichen; zum Bestehen der Klausur
müssen sie mindestens 45 Punkte erreichen.
• Die Bearbeitungszeit beträgt 90 Minuten.
Viel Erfolg bei der Bearbeitung der Aufgaben!
-1-
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Aufgabe 1 (Syntax):
(15 Punkte)
Das folgende Java Programm Primzahl enthält insgesamt 15 Syntax- und Typisierungsfehler.
Markieren Sie davon mindestens 12 Fehler deutlich im Programmtext und korrigieren Sie diese
eindeutig.
Tragen Sie die im Programmtext markierten Fehler in die Tabelle auf der Seite gegenüber ein und
geben Sie die jeweilige Zeilennummer und die Korrektur an. Geben Sie in der Tabelle darunter
zusätzlich für drei Fehler Ihrer Wahl eine kurze Erläuterung des Fehlers an.
Hinweis: Das Programm soll nicht auf seine Korrektheit hin überprüft werden; die Fehler sollen
lediglich syntaktisch korrigiert werden.
Bewertung:
• Für jeden korrekt markierten Fehler gibt es 0,5 Punkte
• Für jeden fälschlich markierten Fehler werden 0,5 Punkte abgezogen
• Für jede richtige Korrektur gibt es 0,5 Punkte
• Für jede falsche Korrektur werden 0,5 Punkte abgezogen
• Für jede richtige Erläuterung gibt es 1 Punkt (maximal 3 Punkte)
Maximal können sie in dieser Aufgabe 15 Punkte erreichen; eine negative Punktzahl für diese
Aufgabe insgesamt ist nicht möglich (im schlimmsten Fall erhalten Sie 0 Punkte).
1.
public class Primzahl (
2.
public static void main(String[] args) {
zahl int;
boolean teilerGefunden+1;
Out.print("Wie viele Zahlen wollen sie testen? "),
int wiederholung = In.readDouble();
3.
4.
5.
6.
7.
8.
for (int i = 0.0; i < wiederholung; i+) {
teilerGefunden = = false;
Out.println("Geben Sie eine Zahl ein:");
In.readInt() = zahl;
9.
10.
11.
12.
13.
for (int t = 2; t ** t <= zahl; t++) {
if (zahl % t = 0) {
teilerGefunden = true;
break;
}
}
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
)
}
}
else if (true = teilerGefunden) {
Out.println(" ist keine Primzahl.");
} Else {
Out.println(" ist Primzahl.");
}
-2-
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Aufgabe 1 (Fortsetzung)
Tragen Sie die Fehler und die Korrekturen in die folgende Tabelle ein. Es reicht, wenn Sie 12 Fehler
angeben und korrigieren!
Nr.
Zeile
Fehler
Korrektur
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Tragen Sie die Erläuterung der Fehler in die folgende Tabelle ein. Es reicht, wenn Sie drei Fehler
näher erläutern!
Nr.
Zeile
Fehler
Erläuterung
1
2
3
-3-
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Aufgabe 2 (Ausdrücke und Typisierung):
(15 Punkte)
(a) Welche dieser Zeichenketten sind gemäß der Definition der Programmiersprache Java korrekte
Ausdrücke? Geben Sie für jeden korrekten Ausdruck seinen Typ an!
a und b sind Variablen vom Typ int
a)
5 (23.0 + b)
b)
a - - b
c)
5.0 + < 10
d)
(a) / 10.0D - b
e)
a == 5
f)
"abc" + 5 + 10 + "def"
g)
10 % 2 = 5
h)
(a +) 23 * b
(b) Geben Sie für die folgenden Ausdrücke den Syntaxbaum mit Auswertungsformular an. Beschriften
Sie dabei jedes Zwischenergebnis mit seinem Typ!
a) (1 / 10) * 20.0
b) "abc" + 5 * 10 + "def"
(c) Erläutern Sie kurz den Begriff der "strengen Typisierung" in Java!
-4-
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Aufgabe 3 (Kontrollstrukturen):
(20 Punkte)
(a) Schreiben Sie ein Programm, das Ihnen bei der Auswahl eines Geschenks für eine Person hilft.
Nach dem Start des Programms soll der Benutzer die Werte für die zwei Variablen weiblich und
alter eingeben. Die Variable weiblich gibt dabei an, ob die Person weiblich
(weiblich==true) oder männlich (weiblich==false) ist; die Variable alter gibt das Alter
der Zielperson in Jahren an.
Ihr Programm soll dann die folgenden Ausgaben am Bildschirm liefern:
1. „Puppe“ für weibliche Personen unter 12 Jahren
2. „Schuhe“ für weibliche Personen zwischen 12 und 29 Jahren (Grenzen inklusive)
3. „Socken“ für alle anderen weiblichen Personen
4. „Matchboxauto“ für männliche Personen unter 18 Jahren
5. „Ferrari“ für männliche Personen zwischen 18 und 32 Jahren (Grenzen inklusive)
6. „Krawatte“ für alle anderen männlichen Personen
Ergänzen Sie dazu den folgenden Programmtext auf geeignete Weise:
public class Geschenk {
public static void main(String[] args) {
boolean weiblich = In.readBoolean();
int alter = In.readInt();
}
}
-5-
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Aufgabe 3 (Fortsetzung)
(b) Gegeben ist eine Funktion f wie unten definiert. Schreiben Sie ein Java-Programm, das zu einer
vom Benutzer eingegebenen Zahl n den folgenden Wert berechnet und am Bildschirm ausgibt:
f(1) + f(2) + f(3) + … + f(n)
Ergänzen Sie dazu den folgenden Programmtext auf geeignete Weise:
public class FunktionsSumme {
public static double f(int n) {
return 1.0 / (n*n);
}
public static void main(String[] args) {
}
}
-6-
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Aufgabe 4 (Arrays und Funktionen):
(25 Punkte)
(a) Formulieren Sie ein Programm, das für ein Array von ganzen Zahlen int[] a und eine vom
Benutzer eingegebene ganze Zahl int n den Index des ersten Elementes im Array a am
Bildschirm ausgibt, in dem die Zahl n gespeichert ist. Wenn die Zahl n in dem Array nicht
vorkommt, soll -1 am Bildschirm ausgegeben werden. Formulieren Sie Ihr Programm so
allgemein, daß es für jedes Array funktioniert und nicht nur für das unten angegebene Array.
Ergänzen Sie dazu den folgenden Programmtext auf geeignete Weise.
public class Index {
public static void main(String[] args) {
int[] a = { 7, 0, 3, 5, 8, 3, -4, 9 };
int n = In.readInt();
}
}
-7-
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Aufgabe 4 (Fortsetzung)
(b) Formulieren Sie eine Funktion count, die ein Array von Zahlen double[] zahlen und zwei
Zahlen double ug und double og als Argumente nimmt. Die Funktion soll die Anzahl der
Elemente des Arrays zählen, die in dem geschlossenen Intervall [ug ; og] liegen (einschließlich
der Grenzen), und diese Anzahl als Ergebnis zurück geben. Geben Sie einen geeigneten
Rückgabetyp für diese Funktion an.
Ergänzen Sie dazu den folgenden Programmtext auf geeignete Weise.
public static
___ count(double[] zahlen, double ug, double og) {
}
-8-
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Aufgabe 5 (Programmverständnis):
(15 Punkte)
Gegeben ist die folgende Funktion
public static int s(int[] feld, int x) {
int unten=0, mitte=0, oben=feld.length;
while (unten<oben) {
mitte=(unten+oben)/2;
if (feld[mitte]==x) {
return mitte;
}
if (feld[mitte]>x) {
oben=mitte;
} else {
unten=mitte+1;
}
}
}
return -1;
(a) Berechnen Sie den Rückgabewert der Funktion s bei einem Aufruf mit den Parametern
int[] feld mit
Index
Inhalt
0
3
1
23
2
34
3
38
4
40
5
59
6
72
7
97
und int x mit 23 sowie 51. Füllen sie dazu die folgenden Tabellen aus (soweit wie nötig):
x = 23:
Schleifendurchlauf
vor 1.
nach 1.
nach 2.
nach 3.
nach 4.
nach 5.
nach 6.
Rückgabewert:
x = 51
Schleifendurchlauf
vor 1.
nach 1.
nach 2.
nach 3.
nach 4.
nach 5.
nach 6.
Rückgabewert:
unten
mitte
oben
unten
mitte
oben
-9-
Name:
Vorname:
Matrikelnummer:
Stud.-Abschnitt:
Aufgabe 5 (Fortsetzung)
(b) Beschreiben Sie die Aufgabe, die die Funktion s erfüllt. Gehen Sie dabei davon aus, dass die
Funktion immer mit einem sortierten Array feld aufgerufen wird.
Hinweis: Die Funktion s ist sinnvoll und enthält keine „Gemeinheiten“ oder verborgene Fehler.
- 10 -
Herunterladen