Was ist das hier?

  • Eine Plattform von Flensburger Studenten für Flensburger Studenten
  • Ein Wiki zum Sammeln von Wissen
  • Ein Forum zum Austausch
  • Eine Wissensdatenbank zum Informatikstudium:
    • Programmieren in C, C#, PHP, Javascript, HTML, CSS
    • Datenbanken und Abfragen mit SQL
    • 2D / 3D - Gestaltung
    • Mathe, Physik, Gerätetechnik, RoBs
    • Audio- / Videotechnik
    • ...und vieles mehr

Anmelden

Warum registrieren?

Weil besser als gut!

 

Klausur mit Lösung Prog2

Aufgaben als PDF

Hier könnt ihr euch die Klausur als PDF runterladen.

Allgemeines

Prüfungsnummer: 720835, 730835, 721835, 731835, 741835
Klausur im Fach: Programmieren II (Informatik u. Angewandte Informatik)
Prüfer: Prof. Dr. W. Tepper
Zweitprüfer: Prof. Dr. W. Tepper
Bearbeitungszeit: 120 Minuten
Anzahl der Aufgaben: 4
zugelassene Hilfsmittel: keine
besondere Bedingungen: keine


mögliche Punktzahl: 120
notwendige Punkte für die Note 4.0: 40
notwendige Punkte für die Note 1.0: 85

Zu den Klausuren

Alle Aufgaben sind mit der Sprache C++ zu lösen, andere Lösungen werden nicht gewertet. Außer der Klasse string dürfen keine vordefinierten Klassen verwendet werden. Vollständige Programme (mit allen includes, usings, namespaces, main-function etc.) sind nur dann zu erstellen, wenn dies ausdrücklich in der Aufgabenstellung gefordert ist. Alle Methoden können inline definiert werden.

Aufgabe 1

Aufgabe 1: 25 Punkte

Eine main-function erfragt zuerst: „Wieviele int-Zahlen wollen Sie eingegeben ?“ Anschließend wird eine entsprechende Anzahl Zahlen in ein dynamisches Array eingelesen, dann in genau dieser Folge wieder ausgegeben. Eine function void reverse(int*, int*); kehrt jetzt die Reihenfolge der Feldelemente um, was durch eine erneute Ausgabe aller Elemente verifiziert werden soll. Diese function reverse verwendet void tausche(int*, int*); zum Vertauschen zweier int-Werte. Selbstverständlich sollen Felder mit gerader und ungerader Elementanzahl korrekt behandelt werden. Schreiben Sie die functions main, reverse und tausche. Denken Sie an die Speicherfreigabe.

Aufgabe 2

Aufgabe 2: 30 Punkte

Die Anweisungen:

C++
 
Bruch a( 5 );
Bruch b( 1, 2 );
Bruch c( 1, 4 );
Bruch d( 115, -391 );
Bruch e( -37*234, -37*432 );
cout << a << b << c << d << e << endl;
cout << b + c << endl;
cout << 8 + e << endl;
cout << d * e << endl;
 

erzeugen die Ausgabe:

C++
 
5/1 1/2 1/4 -5/17 13/24
3/4
205/24
-65/408
 

Erstellen Sie die Klasse Bruch vollständig, so dass:
- Brüche instanziiert werden können, deren Zähler und Nenner ganzzahlig sind
- wenn kein Nenner angegeben wird, er den Wert 1 bekommt (siehe Objekt a)
- der Wert 0 für den Nenner nicht akzeptiert wird (exception erzeugen)
- bei der internen Darstellung negative Vorzeichen nur im Zähler berücksichtigt werden, d.h. der Nenner ist immer positiv (siehe Objekte d und e und deren Ausgabe)
- Brüche intern nur gekürzt gespeichert werden. Hierzu müssen Zähler und Nenner durch den größten gemeinsamen Teiler dividiert werden, der von der Methode int ggT(int a, int b) berechnet wird. Der Rumpf dieser Methode sei gegeben.
- Brüche mit << ausgegeben, mit + addiert und mit * multipliziert werden können. Entscheiden Sie hierbei im Einzelfall, ob friends notwendig sind und geben Sie jeweils eine kurze Begründung dazu an.

Aufgabe 3

Aufgabe 3: 25 Punkte Gegeben sei folgendes Programm:

C++
void main()
{
Konto tick( "Tick", 50.0, 10.0 );
tick.zeigDich();
tick.einzahlen( 10.0 );
tick.auszahlen( 71.0 );
tick.einzahlen( 5.0 );
tick.zeigDich();
Konto dagobert( "Dagobert", 0.0, 1.0E8 );
for(double d = 1.0; d <= 1000.0; d = d + 1.0)
dagobert.einzahlen( d );
dagobert.zeigDich();
}

Es erzeugt die Ausgabe:

C++
Konto "Tick":
Kontostand: 50.00 Euro
Dispositionskredit: 10 Euro
Transaktionen: 0
Tick-auszahlen meldet: Kreditlimit erreicht, 70 Euro ausgezahlt.
Konto "Tick":
Kontostand: -5.00 Euro
Dispositionskredit: 10 Euro
Transaktionen: 3
Konto "Dagobert":
Kontostand: 500500.00 Euro
Dispositionskredit: 100000000 Euro
Transaktionen: 1000

Implementieren Sie die Klasse Konto vollständig. Treffen Sie alle Vorkehrungen, um stets einen korrekten Kontozustand zu gewährleisten. Hinweis:
Anzahl Transaktionen = Anzahl einzahlen-Operationen + Anzahl auszahlen-Operationen

Aufgabe 4

Aufgabe 4: 40 Punkte
Ein Schüttgutbunker ist wie folgt aufgebaut:

Kran.jpg

Ein Bunker besteht aus n Silos (im Bild ist n=7), die von einem verschiebbaren Portalkran befüllt oder entleert werden können. Die Operationen sind:
- nachLinks(i), nachRechts(i): Kran um i Positionen nach links bzw. rechts bewegen. Die Endpositionen werden nicht überschritten, die Initialposition ist ganz links.
- fuell(x): Wert x dem Inhalt des Silos an aktueller Position zufügen (mit der Operation +). Ist ein definierter Maximalwert erreicht, wird nicht weiter befüllt.
- gibAlles(): entnimmt den gesamten Inhalt des Silos an aktueller Position und setzt den Inhalt auf einen definierten Initalwert zurück.

Definieren Sie eine Klasse Bunker, die auch erlaubt:
- Bunkerobjekte mit beliebiger Siloanzahl zu erzeugen
- für einen Bunker zu definieren, was seine Silos speichern können. Dabei soll alles erlaubt sein, sofern sich ein Initialwert und ein Maximalwert festlegen läßt und die Operationen < und + existieren
- den aktuellen Inhalt aller Silos an cout zu senden (coutAlles)

Diese Anweisungen:

C++
 
const int intBunkerLaenge = 5;
int initialerIntFuellWert = 0;
int maximalerIntFuellWert = 10;
Bunker<int, intBunkerLaenge> int5Bunker(initialerIntFuellWert,
maximalerIntFuellWert );
int5Bunker.fuell(4);
int5Bunker.fuell(1);
int5Bunker.nachRechts(2);
int5Bunker.fuell(20);
int5Bunker.nachRechts(2);
int5Bunker.fuell(1);
int5Bunker.nachLinks(42);
int temp = int5Bunker.gibAlles();
int5Bunker.nachRechts(1); int5Bunker.fuell(temp);
int5Bunker.coutAlles();
cout << "---------------------------" << endl;
 
const int strBunkerLaenge = 3;
string initialerStrFuellWert = "";
string maximalerStrFuellWert = "Z_DerMaximaleFuellString";
Bunker<string, strBunkerLaenge> str3Bunker(initialerStrFuellWert,
maximalerStrFuellWert );
str3Bunker.fuell("Moi");
str3Bunker.fuell("n");
str3Bunker.nachRechts(1);
str3Bunker.fuell("Flensburg");
str3Bunker.nachRechts(1);
str3Bunker.fuell("Zickzack");
str3Bunker.coutAlles();
 

erzeugen dann diese Ausgabe:

C++
 
1: 0
2: 5
3: 10
4: 0
5: 1
---------------------------
1: Moin
2: Flensburg
3: Z_DerMaximaleFuellString
 
| Mehr

Zahlen & Daten

  • 2046 Seitenaufrufe
  • 1041 Tage alt
  • 14 Versionen
  • Letzte Änderung: 31.08.2009 um 13:29 Uhr

Publish