首页
网站开发
桌面应用
管理软件
微信开发
App开发
嵌入式软件
工具软件
数据采集与分析
其他
首页
>
> 详细
辅导program程序、辅导Java,CSS,c++编程 讲解留学生Prolog|讲解Java程序
项目预算:
开发周期:
发布时间:
要求地区:
Platz für Aufkleber
2. Klausur zu den Lehrveranstaltungen
Grundlagen der Programmierung
& Datenverarbeitung
WS 2019/20
25. September 2020
Hinweise: Bitte lesen!
• Diese Klausur umfasst 8 Aufgaben und 32 Seiten. Überprüfen Sie Ihre Klausur bitte auf Vollständigkeit!
Die Heftklammer der Klausur darf nicht entfernt werden.
• Schreiben Sie bitte zuerst Ihren Namen auf jedes Blatt dieser Klausur und ggf. auf weitere von
Ihnen benutzte Zusatzblätter!
• Es sind keine Hilfsmittel außer Fremdsprachenwörterbucher erlaubt.
• Alle elektronischen Geräte (Handy, Smartphone, PDA, Smartwatches,. . . ) sind auszuschalten. Eingeschaltete
Geräte werden als Täuschungsversuch gewertet.
• Nehmen Sie sich Zeit, die Klausuraufgaben vollständig durchzulesen. Sie können insgesamt 120
Punkte erreichen; mit 60 Punkten haben Sie auf jeden Fall bestanden. Die Bearbeitungszeit beträgt
120 Minuten.
• Sollten Sie mehr als eine Lösung für eine Aufgabe anfertigen, kennzeichnen Sie die Lösung, die
bewertet werden soll. Aufgaben mit zwei Lösungen werden nicht gewertet!
• Verwenden Sie keine Bleistifte, keine Rotstifte, keine Korrekturflüssigkeiten (z. B. Tipp-Ex) und
keine Korrekturroller.
Viel Erfolg bei der Bearbeitung der Aufgaben!
A1 A2 A3 A4 A5 A6 A7 A8 P
15 15 15 15 15 15 15 15 120
http://www.hni.uni-paderborn.de/alg/lehre/ 1 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
Aufgabe 1 – Zusicherungen & Typkonvertierung (7 + 8 = 15 Punkte)
a) Das folgende Programm fragt den Benutzer nach der Eingabe einer ganzen Zahl und gibt entsprechend
dieser Zahl eine oder mehrere Ausgaben aus. Tragen sie in die Tabelle ein, für welche Werte von
i die jeweilige Ausgabe erzeugt wird.
Hinweis: Zur Angabe des Wertebereichs sind sowohl mathematische als auch sprachliche Beschreibungen
zulässig. Es muss immer der komplette Wertebereich angegeben werden! Sie können davon ausgehen,
dass die eingegebene Zahl immer ganzzahlig ist.
1 cout << "Bitte eine ganze Zahl eingeben: ";
2 int i;
3 cin >> i;
4 if ( i<42 ) {
5 cout << "A" << endl;
6 if( (i%2) == 0 ){
7 cout << "B" << endl;
8 }
9 }
10 else if( (i%2) == 0 ) {
11 cout << "C" << endl;
12 }
13 if( i>11 ) {
14 cout << "D" << endl;
15 if( i>22 && i<=25 ) {
16 cout << "E" << endl;
17 }
18 else if( i<32 || i==7 ) {
19 cout << "F" << endl;
20 }
21 } else {
22 cout << "G" << endl;
23 if( i==9 ) {
24 cout << "H" << endl;
25 }
26 }
http://www.hni.uni-paderborn.de/alg/lehre/ 2 / 32
Name, Vorname: Matrikelnummer:
Ausgabe Bedingung für i
A (Beispiel) i ist kleiner 42
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
b) Bestimmen Sie den Typ der folgenden beiden Ausdrücke, indem Sie den dazu gehörigen Syntaxbaum
angeben. Zeichnen Sie dazu so, wie aus der Vorlesung bekannt, den Baum für den entsprechenden
Ausdruck und schreiben Sie an jeden Knoten den entsprechenden Datentyp. Schreiben Sie auch an die
Blätter des Baums den Datentyp. Das Ergebnis des Ausdrucks braucht nicht berechnet und aufgeschrieben
werden.
float f = 2.5f;
short s = 1000;
int i = 12;
double d = 0.0;
1.) d * 2.0f + (float)42
2.) i > f || s*(int)’E’
http://www.hni.uni-paderborn.de/alg/lehre/ 4 / 32
Name, Vorname: Matrikelnummer:
(Zusätzlicher Platz zur Lösung von Aufgabe 1b)
http://www.hni.uni-paderborn.de/alg/lehre/ 5 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
Aufgabe 2 – Schleifen & Programmsimulation (5 + 5 + 5 = 15 Punkte)
a) Programmieren Sie eine for-Schleife welche die Zahlen x = zahl1, . . . , zahl2 ausgibt. Für eine
Zahl die ohne Rest durch 7 teilbar ist, soll an Stelle der Zahl ein “nein“ ausgegeben werden. Die Variablen
zahl1 und zahl2 speichern zwei Zahlen, die vom Benutzer eingeben werden. Die Ausgabe des
Programm für zahl1 = 7 und zahl2 = 15 sieht also wie folgt aus:
Programmierausgabe
Zahl1 ? 7
Zahl2 ? 15
nein 8 9 10 11 12 13 nein 15
Vervollständigen Sie das nachfolgende Programm:
i n t z a hl 1 , z a h l 2 ;
c o ut << " Z a hl 1 ? " ; c i n >> z a h l 1 ;
c o ut << " Z a hl 2 ? " ; c i n >> z a h l 2 ;
http://www.hni.uni-paderborn.de/alg/lehre/ 6 / 32
Name, Vorname: Matrikelnummer:
b) Das folgende Programm berechnet die Quersumme einer Zahl. Formen Sie das angegebene Programmfragment
so um, dass statt der for-Schleife eine while-Schleife verwendet wird. Die Funktionalität,
die einzelnen Berechnungsschritte mit der Variablen zahl und die Ausgabe des modifizierten
Programms sollen identisch zum ursprünglichen Programm sein.
i n t z a h l = 3 6 5;
i n t q u e r = 0 ;
f o r ( i n t i = z a h l ; i > 0; i = i / 1 0 ) {
q u e r = q u e r + i %10;
}
c o ut << " Die Quersumme i s t "<< q u e r ;
Programmierausgabe:
Die Quersumme ist 14
http://www.hni.uni-paderborn.de/alg/lehre/ 7 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
c) Schreiben Sie ein Programm für das Trinkspiel Böse7. Dabei wird der Reihe nach in ganzen Schritten
hochgezählt. Jedes Mal wenn
• die Zahl eine Sieben als Ziffer enthält,
• die Zahl durch Sieben teilbar ist,
• oder die Quersumme der Zahl durch Sieben teilbar ist
muss nein gesagt werden.
Erweitern Sie das unten angegebene Programm so, dass das Programm von 1 bis zu dem vom Benutzer
eingegebenen Maximum hochzählt und jede Zahl ausgibt. Für jede Zahl, auf welche die oben genannte
Regel der Bösen7 zutrifft, soll anstelle der Zahl ein "nein" ausgegeben werden.
Programmierausgabe
Bitte Maximum bis zu dem gespielt werden soll eingeben: 23
1 2 3 4 5 6 nein 8 9 10 11 12 13 nein 15 nein nein 18 19 20 nein 22 23
TIPP: Bilden Sie eine äußere Schleife für das Hochzählen der Zahlen und eine innere Schleife um die
Quersumme zu ermitteln und zu prüfen ob eine 7 in der Zahl vorkommt.
Vervollständigen sie das Nachfolgende Programm:
i n t maximum ;
c o ut << " B i t t e Maximum b i s zu dem g e s p i e l t we rden s o l l ei n g e b e n : " ;
c i n >> maximum ;
http://www.hni.uni-paderborn.de/alg/lehre/ 8 / 32
Name, Vorname: Matrikelnummer:
Aufgabe 3 – Zeiger (8 + 7 = 15 Punkte)
a) Dieses Programm soll die Reihenfolge der Werte in einem gegebenen Integer-Array arr spiegeln.
Initial könnte das Array die folgenden Zahlen enthalten:
{ 4 2 , 1 3 3 7 , 6 9 , 0 , 2 4 , 2 5 , 1 0 1 , 1 2 3 4 5 , 1 3 , 13}
Nach Ablauf des Programms stehen die Zahlen dann in der nachfolgenden (gespiegelten) Reihenfolge
im Array:
{ 1 3 , 1 3 , 1 2 3 4 5 , 1 0 1 , 2 5 , 2 4 , 0 , 6 9 , 1 3 3 7 , 42}
Implementieren Sie ausschließlich mithilfe der vorgegebenen Variablen und Zeigern eine Lösung, die
für eine beliebige Arraylänge größer Null und beliebige Integer-Werte im Array funktioniert. Vermeiden
Sie die Nutzung von eckigen Klammern, verwenden Sie stattdessen Zeigerarithmetik.
Tipp: ‘Durchlaufen’ Sie das Array mit den beiden Zeigern von unterschiedlichen Seiten aus bis hin zur
Mitte und tauschen Sie dabei die Werte unter Zuhilfenahme von save.
//Arraylänge: Alle Werte größer gleich 1 sind möglich
int len = 10;
//Array mit Beispielwerten
int arr[len] = {42, 1337, 69, 0, 24, 25, 101, 12345, 13, 13};
int save;
int* pl = NULL;
int* pr = NULL;
http://www.hni.uni-paderborn.de/alg/lehre/ 9 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
b) In dem folgenden Programm werden einige Berechnungen unter Verwendung von Zeigern durchgeführt.
Vollziehen Sie den Verlauf des Programms nach und füllen Sie für jeden Besuch einer markierten
Stelle einen Eintrag in der Programmsimulationstabelle aus.
• Wenn die Variable zu dem Zeitpunkt nicht lebt, tragen Sie einen Strich ein ‘—’.
• Wenn die Variable lebt, aber der Wert unbekannt ist (weil die Variable noch nicht initialisiert
wurde), tragen Sie ein ‘?’ ein.
• Wenn die Variable lebt und man den Wert der Variable direkt angeben kann, tragen Sie ihn ein.
• Wenn die Variable lebt, es sich bei dem Typ der Variable um einen Zeiger handelt und der Wert
bekannt ist, dann zeichnen Sie einen Pfeil von dem Kästchen der Variable zu dem Kästchen der
referenzierten Variable.
• Es sind nicht für alle Variablen Kästchen vorhanden (Variable i). Für Variablen ohne Kästchen
brauchen Sie keine Eintragung vorzunehmen.
• Nicht benötigte Blöcke können durchgestrichen werden. Es werden nicht alle abgedruckten Blöcke
benötigt.
int numbers[4];
for(int i=1; i<4; i++){
numbers[i] = i + 1;
} // STELLE 1
int *pta = numbers;
int *ptb = pta + 3; // STELLE 2
*pta = *ptb + 7;
pta = pta + *(numbers + 2); // STELLE 3
if(pta > ptb){
*(numbers + 1) = numbers[1];
numbers[2] = *(numbers + 1);
numbers[1] = numbers[2];
} else if (pta == ptb){
pta = pta - 2;
*ptb = *pta + numbers[0];
ptb = &numbers[2];
} else {
pta=&(*ptb);
pta--;
numbers[2] = *pta + 2;
} // STELLE 4
pta[2] = *pta + 46; // STELLE 5
http://www.hni.uni-paderborn.de/alg/lehre/ 10 / 32
Name, Vorname: Matrikelnummer: STELLE
numbers[0]
pta numbers[1]
ptb numbers[2]
numbers[3] STELLE
numbers[0]
------------------------------------------ pta numbers[1]
ptb numbers[2]
STELLE numbers[3]
numbers[0]
pta numbers[1] ------------------------------------------
ptb numbers[2]
numbers[3] STELLE
numbers[0]
------------------------------------------ pta numbers[1]
ptb numbers[2]
STELLE numbers[3]
numbers[0]
pta numbers[1] ------------------------------------------
ptb numbers[2]
numbers[3] STELLE
numbers[0]
pta numbers[1]
ptb numbers[2]
numbers[3] http://www.hni.uni-paderborn.de/alg/lehre/ 11 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur STELLE
numbers[0]
pta numbers[1]
ptb numbers[2]
numbers[3] STELLE
numbers[0]
------------------------------------------ pta numbers[1]
ptb numbers[2]
STELLE numbers[3]
numbers[0]
pta numbers[1] ------------------------------------------
ptb numbers[2]
numbers[3] STELLE
numbers[0]
------------------------------------------ pta numbers[1]
ptb numbers[2]
STELLE numbers[3]
numbers[0]
pta numbers[1] ------------------------------------------
ptb numbers[2]
numbers[3] STELLE
numbers[0]
pta numbers[1]
ptb numbers[2]
numbers[3] http://www.hni.uni-paderborn.de/alg/lehre/ 12 / 32
Name, Vorname: Matrikelnummer:
(Diese Seite ist frei, kann aber als zusätzlicher Platz zur Lösung von anderen Aufgaben genutzt werden)
http://www.hni.uni-paderborn.de/alg/lehre/ 13 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
Aufgabe 4 – Funktionen (15 Punkte)
In dieser Aufgabe soll ein Programm erstellt werden, welches eine positive komplexe Zahl der Form
z = a + i · b in die Polardarstellung der Form z = r · e
iφ umwandelt, wobei r der Betrag und φ das
Argument der komplexen Zahl im Bogenmaß ist. Anschließend soll die Polardarstellung auf der Konsole
ausgegeben werden.
Wir benötigen zunächst eine Funktion um eine Zahl einzulesen. Definieren Sie dazu im folgenden Kasten
eine Funktion eingabe, die keine Parameter besitzt. Die Funktion liest einen float-Wert vom
Benutzer ein und gibt das Ergebnis als Funktionswert an die aufrufende Stelle zurück.
Definieren Sie im folgenden Kasten eine Funktion berechne_betrag, die zwei Call-by-Value Parameter
a und b vom Typ float besitzt.
Um die Wurzel einer Zahl x zu ziehen, verwenden Sie kommentarlos die Library-Funktion sqrt(x).
Definieren Sie im folgenden Kasten eine Funktion berechne_argument, die zwei Call-by-Reference
Parameter a und b vom Typ float besitzt und keinen Funktionswert zurück liefert. Die Funktion
berechnet den Parameter φ = arctan ( b
a
) der komplexen Zahl z = a + i · b und schreibt den Wert des
Parameters φ in die Call-by-Reference Parameter Variable a. Um den arctan einer Zahl x zu berechnen
verwenden Sie kommentarlos die Library-Funktion atan(x).
http://www.hni.uni-paderborn.de/alg/lehre/ 14 / 32
Name, Vorname: Matrikelnummer:
Definieren Sie im folgenden Kasten eine Funktion ausgabe, die zwei Call-by-Value Parameter r und
phi besitzt und keinen Funktionswert zurück liefert. Die Funktion gibt die komplexe Zahl in Polardarstellung
auf der Konsole aus.
Beispiel: Für r=1.5 und phi=2.5 sieht die Ausgabe wie folgt aus: 1.5 ∗ exp(i ∗ 2.5)
Schreiben Sie im folgenden Kasten das Hauptprogramm (main-Funktion), dass die zu Beginn dieser
Aufgabe beschriebene Funktionalität besitzt. Verwenden Sie dazu die oben definierten Funktionen!
http://www.hni.uni-paderborn.de/alg/lehre/ 15 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
Aufgabe 5 – Klassen (10 + 5 = 15 Punkte)
a) Gegeben ist die nachfolgende Implementierung einer Datenstruktur: Die Datenstruktur erlaubt das
Speichern von Matrikelnummer und Name von Studierenden. Zur Verwaltung und Speicherung der Daten
dient die Struktur studiTyp. Die Speicherung der Daten erfolgt mit der Funktion einfuegen(..).
Es können auch alle gespeicherten Daten mit Hilfe der Funktion alleAusgeben(..) ausgegeben werden.
Die Datenstruktur wurde mit Hilfe einer Struktur und geeigneten Funktionen implementiert.
const int maxStudis = 100;
struct studiTyp {
string* name;
int* matrNr;
int anzahlStudis;
};
studiTyp* initDatenstruktur() {
studiTyp* studis = new studiTyp;
studis->name = new string[maxStudis];
studis->matrNr = new int[maxStudis];
studis->anzahlStudis = 0;
return studis;
}
void einfuegen(studiTyp* studis, string name, int matrNr) {
if (studis->anzahlStudis < maxStudis) {
studis->name[studis->anzahlStudis] = name;
studis->matrNr[studis->anzahlStudis] = matrNr;
studis->anzahlStudis = studis->anzahlStudis + 1;
}
}
void alleAusgeben(studiTyp* studis) {
for(int i=0; i
anzahlStudis; i++)
cout << studis->name[i] << ", " << studis->matrNr[i] << endl;
}
void removeDatenstruktur(studiTyp* studis) {
delete studis->name;
delete studis->matrNr;
delete studis;
}
Aufgabe: Implementieren Sie dieselbe Datenstruktur mit Hilfe einer Klasse Studi, die dieselbe Funktionalität
bietet. D.h. die Klasse Studi soll einerseits entsprechende Methoden einfuegen(..) und
alleAusgeben(..) bieten und andererseits auch einen geeigneten Konstruktor und einen geeigneten
Destruktor bieten.
http://www.hni.uni-paderborn.de/alg/lehre/ 16 / 32
Name, Vorname: Matrikelnummer:
http://www.hni.uni-paderborn.de/alg/lehre/ 17 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
b) Wenden Sie Ihre Klasse Studi nun an um Datensätze abzuspeichern und anschließend auszugeben:
Zuerst erzeugen Sie ein Objekt der Klasse. Anschließend speichern Sie die drei Datensätze ("Mueller",
11111), ("Meyer", 22222) und ("Schulze", 33333) mit Hilfe der Klassenmethode einfuegen(..) in
dem Objekt der Klasse. Nach dem Abspeichern sollen die drei Datensätze mittels der Klassenmethode
alleAusgeben(..) ausgeben werden.
Hinweis: Es ist nicht nötig Name und Matrikelnummer mittels cin vom Benutzer abzufragen. Sie sollen
diese Werte direkt beim dem entsprechenden Methodenaufruf als Parameter angeben.
int main() {
}
http://www.hni.uni-paderborn.de/alg/lehre/ 18 / 32
Name, Vorname: Matrikelnummer:
(Diese Seite ist frei, kann aber als zusätzlicher Platz zur Lösung von anderen Aufgaben genutzt werden)
http://www.hni.uni-paderborn.de/alg/lehre/ 19 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
Aufgabe 6 – Vererbung (13 + 2 = 15 Punkte)
a) Gegeben ist die Klasse Form2d mit den Methoden flaeche und anzeigen. Implementieren Sie
die Klassen Rechteck und Kreis, sodass das gegebene Hauptprogramm die gegebene Ausgabe liefert.
Sowohl die Klasse Rechteck als auch die Klasse Kreis sollen von der Klasse Form2d erben. Zusätzliche
Attribute der beiden Klassen Rechteck und Kreis sollen als private markiert sein.
Hinweis: Der Flächeninhalt eines Rechtecks berechnet sich aus dem Produkt seiner beiden Seiten. Der
Flächeninhalt eines Kreises ist gleich πr2
, wobei r der Radius des Kreises ist. Für die Konstante π
können Sie die gegebene Konstante PI verwenden.
const double PI = 3.14159265358979323846;
class Form2d {
public:
Form2d() {}
virtual ~Form2d() {};
float flaeche(){
return -1.0f;
}
virtual void anzeigen() {
cout << "Eine Form" << endl;
}
};
Hauptprogramm:
int main()
{
Form2d* f = new Form2d();
Rechteck* r = new Rechteck(3,4);
Kreis* k = new Kreis(3);
f->anzeigen();
r->anzeigen();
k->anzeigen();
cout << "Flaeche f = " << f->flaeche() << endl;
cout << "Flaeche r = " << r->flaeche() << endl;
cout << "Flaeche k = " << k->flaeche() << endl;
}
Ausgabe:
Eine Form
Ein Rechteck
Ein Kreis
Flaeche f = -1
Flaeche r = 12
Flaeche k = 28.2743
http://www.hni.uni-paderborn.de/alg/lehre/ 20 / 32
Name, Vorname: Matrikelnummer:
http://www.hni.uni-paderborn.de/alg/lehre/ 21 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
b) Geben Sie die Ausgabe des folgenden Hauptprogramms an unter der Annahme, dass sämtliche
Klassen und Methoden aus Teil a) korrekt implementiert wurden.
int main()
{
Form2d* f = new Form2d();
Rechteck* r = new Rechteck(3,4);
Kreis* k = new Kreis(3);
Form2d* formen[2];
formen[0] = r;
formen[1] = k;
formen[0]->anzeigen();
cout << "Flaeche = " << formen[1]->flaeche() << endl;
}
http://www.hni.uni-paderborn.de/alg/lehre/ 22 / 32
Name, Vorname: Matrikelnummer:
(Diese Seite ist frei, kann aber als zusätzlicher Platz zur Lösung von anderen Aufgaben genutzt werden)
http://www.hni.uni-paderborn.de/alg/lehre/ 23 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
Aufgabe 7 – Datenstruktur Schlange (7 + 8 = 15 Punkte)
In dieser Aufgabe wird die Version der Datenstruktur Schlange verwendet, die mit Klassen und Methoden
implementiert wurde. Die Methoden verhalten sich so, wie aus der Vorlesung und den Übungen
bekannt.
class Node {
public:
int value;
Node *next;
Node(int x) : value(x), next(NULL) {}
};
class Schlange {
private:
Node *first, *last;
public:
Schlange() : first(NULL), last(NULL) {}
~Schlange();
bool empty();
void enque(int x);
void deque();
int head();
int size(); // In Aufgabenteil a) zu entwickeln
};
a) (Entwicklersicht)
Erweitern Sie die Klasse Schlange um die Methode size(), welche die Kapazität, sprich, die Anzahl
der Elemente, die sich in der Schlange befinden, berechnet und an die aufrufende Stelle zurückgibt.
Dabei sollen keine weiteren private (oder öffentliche) Attribute der Klasse definiert werden, d.h. arbeiten
Sie lediglich mit den vorhandenen Variablen *first, *last, *next, sowie mit ggfs. weiteren lokalen
Variablen, welche Sie beliebig innerhalb von size() definieren können.
http://www.hni.uni-paderborn.de/alg/lehre/ 24 / 32
Name, Vorname: Matrikelnummer:
b) (Anwendersicht)
Gegeben sind zwei Schlangen q1 und q2, welche ganze Zahlen (int) enthalten. Schreiben Sie ein Programm,
welches aus der Schlange mit höherer Kapazität solange Elemente entfernt, bis die Kapazität
beider Schlangen dieselbe ist. Anschließend soll die Summe der Zahlen, welche entfernt wurden auf der
Konsole ausgegeben werden. Verwenden Sie dazu nur die Methoden der Datenstruktur, d.h. ein Zugriff
auf die Elemente der Schlange über die Variablen *first, *last und *next ist in diesem Aufgabenteil
NICHT ZULÄSSIG! Sie dürfen die Methode size() aus Aufgabenteil a) kommentarlos verwenden.
Schlange* q1 = new Schlange();
Schlange* q2 = new Schlange();
// Beispielhafte Belegung der beiden Schlangen:
q1->enque(3); q1->enque(4); q1->enque(2); q1->enque(8); q1->enque(23);
q2->enque(2); q2->enque(14);
// Die Ausgabe wäre in diesem Fall: "Summe: 9"
http://www.hni.uni-paderborn.de/alg/lehre/ 25 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
Aufgabe 8 – Template & STL (8 + 7 = 15 Punkte)
a) Hier sollen gewöhnliche Funktionen und Klassen auf die Verwendung von Templates umgestellt
werden: Die Funktion differenzArray berechnet für zwei Arrays mit int Zahlen die Summe der
paarweisen absolute Differenz. Die Klasse Diff berechnet für zwei int Zahlen die absolute Differenz.
Sowohl die Funktion differenzArray als auch die Klasse Diff arbeiten mit dem Datentyp int. Das
Hauptprogramm main() erzeugt die folgende Beispielausgabe:
Differenzen: 6
Differenzen: 6
int differenzArray(int *arr1, int *arr2, int anzahl) {
int summe = 0;
int differenz;
for(int i=0; i
differenz = arr1[i]-arr2[i];
if (differenz < 0) summe = summe - differenz;
else summe = summe + differenz;
}
return summe;
}
class Diff {
private:
int a, b;
public:
Diff(int a, int b) : a(a), b(b) {}
int getAbsDiff() {
if(a > b) return a-b;
else return b-a;
}
};
int main() {
int werte1[] = {4,1,3};
int werte2[] = {2,1,7};
Diff paar1(werte1[0], werte2[0]);
Diff paar2(werte1[1], werte2[1]);
Diff paar3(werte1[2], werte2[2]);
cout << "Differenzen: " << differenzArray(werte1, werte2, 3) << endl;
cout << "Differenzen: " << paar1.getAbsDiff() + paar2.getAbsDiff() +
paar3.getAbsDiff() << endl;
}
Aufgabe:
• Bauen Sie die Funktion differenzArray zu einem Funktions-Template um, sodass die zwei Arrays
von einem anderen Zahlen-Typ (z.B. float, double, usw.) sein können.
• Bauen Sie die Klasse Diff zu einem Klassen-Template um, sodass die gespeicherten Werte a, b
von einem anderen Zahlen-Typ (z.B. float, double, usw.) sein können.
• Das neue Hauptprogramm main() nach dem Kasten zeigt die Verwendung der Templates mit dem
Datentyp float und muss nicht verändert werden.
http://www.hni.uni-paderborn.de/alg/lehre/ 26 / 32
Name, Vorname: Matrikelnummer:
• Es erzeugt die folgende Beispielausgabe:
Differenzen: 6.2
Differenzen: 6.2
int main() {
float werte1[] = {4.2, 1.0, 3.1};
float werte2[] = {2.1, 1.0, 7.2};
Diff
paar1(werte1[0], werte2[0]);
Diff
paar2(werte1[1], werte2[1]);
Diff
paar3(werte1[2], werte2[2]);
cout << "Differenzen: " <<
differenzArray
(werte1, werte2, 3) << endl;
cout << "Differenzen: " <<
paar1.getAbsDiff()+ paar2.getAbsDiff() + paar3.getAbsDiff() << endl;
}
http://www.hni.uni-paderborn.de/alg/lehre/ 27 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
b) Schreiben Sie ein Programm, dass folgende Schritte nacheinander durchführt:
• Definieren Sie einen vector der STL der Länge 2. Der Name des Vektors soll zahlen heißen.
• Speichern Sie die Werte 3 und 5 in den beiden Elementen des Vektors.
• Setzen Sie die Größe des Vektors auf 5.
• Hängen Sie hinten an den Vektor zwei weitere Werte 7 und 9. Dadurch erhöht sich die Größe des
Vektors um 2.
• Setzen Sie die Kapazität des Vektors auf 20.
• Geben Sie alle Zahlen des Vektors mit Hilfe zu definierender Iteratoren und einer entsprechenden
Schleife auf der Konsole aus.
http://www.hni.uni-paderborn.de/alg/lehre/ 28 / 32
Name, Vorname: Matrikelnummer:
Zusatzblatt. Wichtig: Falls Sie dieses Blatt zur Lösung einer Aufgabe verwenden, kennzeichnen Sie dieses
auch direkt an der Aufgabe und streichen Sie nicht zu bewertende Lösungen!
http://www.hni.uni-paderborn.de/alg/lehre/ 29 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
Zusatzblatt. Wichtig: Falls Sie dieses Blatt zur Lösung einer Aufgabe verwenden, kennzeichnen Sie dieses
auch direkt an der Aufgabe und streichen Sie nicht zu bewertende Lösungen!
http://www.hni.uni-paderborn.de/alg/lehre/ 30 / 32
Name, Vorname: Matrikelnummer:
Zusatzblatt. Wichtig: Falls Sie dieses Blatt zur Lösung einer Aufgabe verwenden, kennzeichnen Sie dieses
auch direkt an der Aufgabe und streichen Sie nicht zu bewertende Lösungen!
http://www.hni.uni-paderborn.de/alg/lehre/ 31 / 32
Grundlagen der Programmierung & Datenverarbeitung WS 2019/20, 2. Klausur
Zusatzblatt. Wichtig: Falls Sie dieses Blatt zur Lösung einer Aufgabe verwenden, kennzeichnen Sie dieses
auch direkt an der Aufgabe und streichen Sie nicht zu bewertende Lösungen!
http://www.hni.uni-paderborn.de/alg/lehre/ 32 / 32
软件开发、广告设计客服
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-23:00
微信:codinghelp
热点项目
更多
urba6006代写、java/c++编程语...
2024-12-26
代做program、代写python编程语...
2024-12-26
代写dts207tc、sql编程语言代做
2024-12-25
cs209a代做、java程序设计代写
2024-12-25
cs305程序代做、代写python程序...
2024-12-25
代写csc1001、代做python设计程...
2024-12-24
代写practice test preparatio...
2024-12-24
代写bre2031 – environmental...
2024-12-24
代写ece5550: applied kalman ...
2024-12-24
代做conmgnt 7049 – measurem...
2024-12-24
代写ece3700j introduction to...
2024-12-24
代做adad9311 designing the e...
2024-12-24
代做comp5618 - applied cyber...
2024-12-24
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 9951568
© 2021
www.rj363.com
软件定制开发网!