Ausgabe bei a=24, b=5:

Werbung
Objektorientierte Programmierung
Aufgabe 1 (C0 - Schleifen)
Was gibt das folgende Programm bei der Eingabe a = 24 und b = 5 aus?
prog aufgabe1
{
int a;
int b;
print("Bitte geben Sie a ein: \n");
read(a);
print("Bitte geben Sie b ein: \n");
read(b);
a = (a % b) == 0 ? 17 : 10;
int i = 1;
while ( i < a )
{
print(b * i + a);
print("-");
i = i + 1;
a = a - 1;
}
}
Ausgabe bei a=24, b=5:
1
2 Punkte
Objektorientierte Programmierung
Aufgabe 2 (Kontourmodell)
2
15 Punkte
Gegeben ist das folgende Programm in der Sprache C1. Erstellen Sie zwei Kontourmodelle
zu dem im Programm markierten Zeitpunkten. Gehen Sie davon aus, dass für a der Wert
5 und für b der Wert 2 eingegeben wird.
prog aufgabe3
int d(int var1, int var2)
{
return e(var1 - 2, var2);
}
int e(int var1, int var2)
{
// 1. Kontourmodell zu diesem Zeitpunkt ausgeben
return var1 * var2;
}
void f(int var1,
{
int var3; int
var3 = var1 +
var4 = var2 +
g(var3,var4);
}
int var2)
var4;
3;
var1;
void g(int var1, int var2)
{
int summe;
summe = var1 + var2;
// 2. Kontourmodell zu diesem Zeitpunkt ausgeben
print("Summe = "); print(summe); print("\n");
}
{
int a; int b; int c;
print("Bitte geben Sie a und b ein: \n");
read(a);
read(b);
c = d(a,b);
f(c,b);
}
Objektorientierte Programmierung
3
Objektorientierte Programmierung
Aufgabe 3 (C2 - globale Variablen)
Was gibt dieses Programm aus? Begründen Sie Ihre Antwort!
prog aufgabe3
int x;
void f1(float y){
x = 10; y = 10;}
int y;
void f2(int x){ x = 20; y = 20;}
int f3() { int y; y = 2; x = y; return x + 1; }
int f4() { return f3() + x + y; }
{ x = 1;
int y;
y = 5;
f1(x);
f2(x);
x = f3();
x = f4();
print(x);print(" --- ");
print(y);
}
Ausgabe:
Begründung
(Kontourmodell reicht aus):
4
5 Punkte
Objektorientierte Programmierung
5
Objektorientierte Programmierung
Aufgabe 4 (C0 - Bedingungen)
6
3 Punkte
Formen Sie die folgenden Formulierungen in logische Ausdrücke der Sprache C0 um.
Gehen Sie davon aus, dass x, y, z Zahlen und u, v logische Ausdrücke sind.
Der logische Ausdruck ist wahr, wenn
1. x größer als y ist und y größer oder gleich z ist
Ausdruck:
2. die Summe von x und y kleiner dem Produkt von y und z ist oder die Differenz von
z und x größer als 2 ist
Ausdruck:
3. u wahr ist und v nicht wahr ist oder u und v nicht wahr sind
Ausdruck:
Objektorientierte Programmierung
7
Aufgabe 5 (C3 - Parameterübergabemechanismen)
10 Punkte
Gegeben ist folgendes Programm in der Sprache C3
prog aufgabe4
int z;
void g (______ int x, ______ int y)
int v;
v = x;
v = v * y;
x = v;
y = z / 2;
}
{
{ int w;
z = 7;
w = 15;
g(______ z, ______ w);
print ("\nz= "); print(z);
print ("\nw= "); print(w);
}
Die Ausgabe des Programms kann durch die verschiedenen Parameterübergabekonzepte beeinflusst werden. Tragen Sie in die folgende Tabelle für die verschiedenen Aufrufe
von g die erzielten Ausgabewerte ein. Ein Werteaufruf wurde in der Tabelle mit − gekennzeichnet.
Parametertyp z Parametertyp w Ausgabe des Programms
ref
ref
z=
w=
inout
inout
z=
w=
−
inout
z=
w=
−
−
z=
w=
ref
out
z=
w=
Objektorientierte Programmierung
Aufgabe 6 (C4 - Reihungen)
8
8 Punkte
Gegeben ist das folgende Programm. In diesem sind von den beiden Unterprogrammen
print array und reverse array nur die Funktionsköpfe vorgegeben. Implementieren Sie
die fehlenden Funktionsrümpfe.
prog aufgabe5
// Prozedur gibt die Zahlen der Reihung zeilenweise
// (eine Zahl pro Zeile) in der Konsole aus
void print_array(int [] zarray) {
}
//
//
//
//
//
Funktion dreht die Zahlen aus der Reihung zarray um
Beispiel: zarray = 4, 7, 9
==> neue Reihung = 9, 7, 4
neue Reihung wird im Funktionswert zurueck gegeben
zarray wird durch die Sortierung nicht veraendert, d.h. sie
enthaelt nach der Sortierung die Elemente in urspruenglicher Reihenfolge
int [] reverse_array(int [] zarray) {
}
{ int [] zfeld;
int [] sortfeld;
zfeld = new int [10];
sortfeld = new int [10];
int i; i = 0;
while (i < 10) {
read(zfeld[i]);
i = i + 1; }
sortfeld = reverse_array(zfeld);
print_array(sortfeld); }
Objektorientierte Programmierung
Aufgabe 7 (zusammengesetzte Datentypen)
9
2 Punkte
Definieren Sie in C# einen Verbund mit dem Namen Buch. Dieser Verbund wird aus
folgenden Komponenten zusammengesetzt:
1. Kennung,
2. Titel,
3. Autor,
4. Anzahl Seiten und
5. Kurzbeschreibung
Die Kennung und die Anzahl der Seiten sind ganze Zahlen. Alle weiteren Einträge sollen
als Strings abgelegt werden.
Objektorientierte Programmierung
Aufgabe 8 (Vererbung)
10
7 Punkte
Was gibt dieses Programm aus? Begründen Sie Ihre Antwort!
using System;
namespace aufgabe
{
class Zahlenpaar {
protected static double zahl1=5;
protected double zahl2=2;
public void setZahl1(double param) { zahl1 = param; }
public void setZahl2(double param) { zahl2 = param; }
public virtual void print() {
Console.WriteLine("Zahl1 = " + zahl1 + " : Zahl2 = " + zahl2);
}
}
class Taschenrechner : Zahlenpaar {
double summe() { return zahl1 + zahl2; }
public double differenz() { return zahl1 - zahl2; }
public override void print() {
base.print();
Console.WriteLine("Summe = " + summe());
Console.WriteLine("Differenz = " + differenz());
}
}
class Program
{
static void Main() {
Zahlenpaar aundb = new Zahlenpaar();
Taschenrechner TR100 = new Taschenrechner();
aundb.setZahl1(7.0);
aundb.setZahl2(3.0);
TR100.print();
}
}
}
Ausgabe:
Begründung
(z.B. Kontourmodell mit Objekten):
Objektorientierte Programmierung
11
Objektorientierte Programmierung
Aufgabe 9 (abstrakte Klassen)
12
10 Punkte
Das folgende Programm enthält 5 Fehler. Bei diesen Fehlern handelt es sich um Syntaxfehler,
fehlende bzw. falsch positionierte Schlüsselworte und Zugriffsschutzverletzungen. Geben Sie bitte
die Zeilennummer an, in welcher der Fehler auftritt und erläutern Sie diesen kurz.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
using System;
namespace aufgabe8
{
abstract class Ausgabe {
public void print();
public virtual void print_reell() {}
}
class Bruch : Ausgabe {
int zaehler;
int nenner;
public void SetzeNenner(int par) { nenner = par; }
public void SetzeZaehler(int par) { zaehler = par; }
void kuerzen() {
int k = nenner;
if (nenner > zaehler) k = zaehler;
for (; k > 1; k--) {
if (zaehler % k == 0) && (nenner %k == 0) break;
}
zaehler /= k;
nenner /= k; }
public override void print() {
Console.WriteLine(zaehler + "/" + nenner); }
public override void print_reell() {
float hzaehler = zaehler;
float hnenner = nenner;
Console.WriteLine(hzaehler / hnenner) }
}
class Programm
{
static Main() {
Bruch b = new Bruch();
b.SetzeNenner(14);
b.SetzeZaehler(8);
b.print();
b.kuerzen();
b.print(); b.print_reell(); }
}
}
Objektorientierte Programmierung
Fehler 1:
Zeile:
Begründung:
Fehler 2:
Zeile:
Begründung:
Fehler 3:
Zeile:
Begründung:
Fehler 4:
Zeile:
Begründung:
Fehler 5:
Zeile:
Begründung:
13
Objektorientierte Programmierung
Aufgabe 10 (Verständnisfragen)
14
15 Punkte
Zu den folgenden Fragen sind jeweils mehrere mögliche Antworten gegeben. Kreuzen Sie
die richtigen Antworten an. Nur die korrekte Kombination ergibt einen Punkt. Begründen
Sie kurz Ihre Antworten.
1. Programmstück:
prog frage4
class Kl {
int x; }
void f(ref Kl fkl)
{ fkl.x = 4; }
void g(Kl gkl)
{ gkl.x = 5; }
{
Kl objKl;
objKl = new Kl();
objKl.x = 3;
g(objKl);
print(objKl.x);
f(ref objKl);
print(" - "); print(objKl.x);
}
Was gibt das Programm aus? Gehen Sie bei der Begründung auf die verwendeten
Parameterübergabemechanismen ein.
a) 3 - 4
b) 3 - 5
c) 5 - 4
Begründung:
Objektorientierte Programmierung
2. Wie viele Zahlen kann das Feld zfeld aufnehmen?
int [,,] zfeld = new [2,3,4];
a) 9
b) 14
c) 24
Begründung:
3. Programmstück:
1.
2.
3.
4.
5.
6.
7.
8.
int [][] z;
z = new int [4][];
for (i=0;i<4;i++)
z[i] = new int [i+1];
z[0][0] = 5;
z[1][0] = 6;
z[0][1] = 7;
z[1][1] = 8;
Warum bricht das Programm ab ?
a) NULLReferenceException in Zeile 7
b) ArrayIndexOutOfBoundException in Zeile 4
c) es läuft durch
Begründung:
15
Objektorientierte Programmierung
16
4. Programmstück:
1. struct a { public int x; }
2. class b { public int x; }
3. ...
4. a obja = new a;
5. a objc;
6. b objb = new b;
7. b objd;
8. obja.x = 4;
9. objb.x = 5;
10.objc.x = 6;
11.objd.x = 7;
Das Programmstück kann so nicht vom Compiler übersetzt werden? In welcher Zeile
würde der Compiler einen Fehler melden?
a) Zeile 4 - new kann nicht für Verbunde angewendet werden, da diese Wertetypen
sind
b) Zeile 10 - auf objc.x kann nicht zugegriffen werden, da in Zeile 4 kein Speicher
für objc reserviert wurde
c) Zeile 11 - auf objd.x kann nicht zugegriffen werden, da in Zeile 7 kein Speicher
für objd reserviert wurde
d) das Programmstück enthält keine Syntaxfehler
Begründung:
Objektorientierte Programmierung
17
5. Programmstück:
interface b { void print (); }
class a { public virtual void print() {
Console.WriteLine("Hallo Deutschland!");}
}
class c : a, b
{
public override void print() { Console.WriteLine("Hallo Welt!");}
void b.print() { Console.WriteLine("Hallo Europa!");}
}
class Program
{
static void Main(string[] args)
{
b objc = new c();
objc.print();}
}
Was gibt das Programm aus?
a) Hallo Welt!
b) Hallo Europa!
c) Hallo Deutschland!
Begründung:
Objektorientierte Programmierung
Aufgabe 11 (Programm)
18
15 Punkte
Definieren Sie in C# eine Klasse Woerterbuch. Diese Klasse verwaltet eine Menge von
Wörtern. Verwenden Sie für Ihre Klasse die gegebene Schnittstelle SWB
interface SWB {
// Einfuegen eines Wortes in das Woerterbuch
void setWort(string wort);
// gibt die Anzahl der Woerter im Woerterbuch zurueck
int getAnzahl();
// zeilenweise Ausgabe aller Woerter im Woerterbuch
void print();
}
Die Klasse Woerterbuch benötigt weiterhin die privaten Attribute:
• wmenge - eindimensionales Feld mit Elementen vom Typ string
• anzahl - aktuelle Anzahl der Wörter im Wörterbuch
Implementieren Sie die in der Schnittstelle vorgegebenen Methoden als public.
Ergänzen Sie die Klasse um folgende Methode:
• init() - es wird der Parameter ianzahl vom Typ int übergeben. Dieser gibt die
maximale Anzahl von Wörtern im Wörterbuch an. Im Rumpf der Methode muss
das Feld wmenge mit der entsprechenden Länge angelegt werden. Weiterhin sollen
die einzelnen Feldelemente mit der Zeichenkette ”-” initialisiert werden. Auch die
Initialisierung des Attributes anzahl gehört zu den Aufgaben dieser Methode.
Bemühen Sie sich um Verständlichkeit und guten Programmierstil (anderenfalls gibt
es Punktabzüge). Schreiben Sie die Klassendefinition vollständig und ohne Syntaxfehler.
Objektorientierte Programmierung
19
Objektorientierte Programmierung
20
Aufgabe 12 (Programm)
8 Punkte
Gegeben sind folgende 3 Klassen:
class intbox{
int daten;
void set(int d) {
daten = d; }
int get() {
return daten; }
}
class stringbox{
string daten;
void set(string d) {
daten = d; }
string get() {
return daten; }
}
class boolbox{
bool daten;
void set(bool d) {
daten = d; }
bool get() {
return daten; }
}
a) Schreiben Sie eine generische Klasse blackbox, welche die gegebenen drei Klassen
implementiert.
Wie lautet die Definition der folgenden Instanzen von der Klasse blackbox
• ibox - Elementtyp int,
• sbox - Elementtyp string und
• bbox - Elementtyp bool.
b) Angenommen in Ihrer generischen Klasse blackbox gibt es die Methode
public int f() { ... return daten * g();}
Beantworten Sie folgende Fragen:
• Der Compiler bringt die Fehlermeldung: Der Bezeichner g ist im aktuellen
”
Kontext nicht vorhanden“ Warum? Korrigieren Sie den Fehler!
• Warum können Sie jetzt die generische Klasse blackbox nicht mehr als int,
string bzw. bool instanziieren?
Herunterladen