Hilfe zur Klausuraufgabe Klausur WS 2016/17 (Mrz 2017)

Hochschulabschluss
Bachelor of Science
Studiengang
M.Sc. Wirtschaftsinformatik
Hier mein Lösungsvorschlag:

Aufgabe 1


R, ?, F, F, R, R, F, F, ?, F

Aufgabe 2
17a2a.png.html

Der Bildupload funktioniert nicht so richtig. Link zum Bild:
https://picload.org/view/rwcooagw/17a2a.png.html

Symmetrische Ordnung: (hier mache ich sehr gerne Fehler -.-)

C B Q E P F D A H K J I G M L R O N

b) KE3 S.24ff. Es handelt sich um den INSERTIONSORT (Sortieren durch Einfügen)

Vorgehen: Es gibt zwei „Listen“, eine sortierte und eine unsortierte.
Pro Durchgang wird von der unsortierte Liste ein Element ausgewählt und in die sortierte Liste( natürlich an der richtigen Stelle) eingefügt.

Code schreiben: siehe. KE3 S.26

c)KE3 S.72 symmetrische Ordnung ist für die Auflösung eines binären Suchbaums geeignet. Die Datenobjekte werden in sortierter Reihenfolge gespeichert. Zu beachten ist, dass keine zwei gleichen Suchschlüssel existieren dürfen.

d) KE2 S.49

Vorteil von verketteter Speicherung:
+Listenelemente lassen sich auf einfache Weise hinzufügen und entfernen. Es muss nicht umgespeichert werden.
+Bei Implementierung mit Zeigerkonzept, wenig Aufwand.
+spezielle Formen für spezielle Anwendungsbereiche (Ring-, Ankerkettung)

Nachteile
-Keine Selektoren, daher kein gezielter Zugriff auf Datenobjekte
-zusätzlicher Speicherplatzbedarf für Zeigerverwaltung

Anwendungsbereich:
Verkettete Speicherung: hohe Datenbewegungsrate (häufiges hinzufügen/löschen)
Sequentielle Speicherung: geringe Datenbewegungsrate und schneller Zugriff auf Objekte benötigt

Aufgabe 3

a) iterativ
Code:
double ermittle_mw(double *v, int l){
    l++;
    double x=0;
    int i;
    for(i=0; i<l; i++){
        x = x + v[i];
        printf("\n x: %f",x);

        printf("\n v[i]: %f",v[i]);
    }
return (x/i);
}
b) keine Ahnung wie das rekursiv funktionieren soll.
Kann es sein, dass es hierzu eine Beispieldatei gibt? Hab da was im Hinterkopf, aber leider nichts gefunden.

c) do-while vs while

do-while: keine Eintrittsbedingung, d.h. wird mindestens einmal ausgeführt.
while: mit Eintrittsbedingung, kann keinmal ausgeführt werden.

2ter Unterschied???

d) switch
Code:
switch (operator)
{
case '+': printf("\n %f + %f = %f",
operand1, operand2, operand1 + operand2); break;
case '-': printf("\n %f - %f = %f",
operand1, operand2, operand1 - operand2); break;
case '*': printf("\n %f * %f = %f",
operand1, operand2, operand1 * operand2); break;
default: printf("\nUnbekannte Operation!"); break;
}

e) Getränkeautomat
//c1)
Code:
int pruefeGeldstueck(float muenze){
//    Typumwandlung
    int x;
    float temp=0.0;
    temp = 100 * muenze;
    x = (int) (temp);
    switch(x){
        case 5:   printf("\nGeldstueck angenommen!"); return 1;
        case 10:  printf("\nGeldstueck angenommen!"); return 1;
        case 20:  printf("\nGeldstueck angenommen!"); return 1;
        case 50:  printf("\nGeldstueck angenommen!"); return 1;
        case 100: printf("\nGeldstueck angenommen!"); return 1;
        case 200: printf("\nGeldstueck angenommen!"); return 1;
        default:    printf("\nGeldstueck ungueltig!"); return 0;
    }
}
c2)
Code:
int auswahlGetraenkeSorte(){
    int x;
    do{
        printf("\nGetraenk auswaehlen!");
        printf("\n(1) 0.50 Euro Wasser");
        printf("\n(2) 1.20 Euro Limonade");
        printf("\n(3) 2.00 Euro Bier\n");
        scanf("%d",&x);
        printf("\nIhre Auswahl: %d",x);
    }
    while (!(x>0 && x<4));
    return x;
}
c3
Code:
float ermittlePreis(int sorte){
    printf("\nSie haben die Sorte %d ausgewaehlt", sorte);
    float preis;
    switch(sorte)
    {
        case 1: printf("\nWasser kostet 0.50 Euro"); preis=0.5; break;
        case 2: printf("\nLimonade kostet 1.20 Euro"); preis= 1.2; break;
        case 3: printf("\nBier kostet 2.00 Euro"); preis= 2.0; break;
        default: printf("\nfalsche Eingabe -> Abbruch"); preis = 100.00; break;
    }
    return preis;
}
c4
Code:
float bezahlen(float zuZahlen){
    float temp;
    float eingeworfen = 0;
    float rest = zuZahlen;

    while(zuZahlen>0){
        printf("\nBitte werfen sie ein gueltiges Geldstueck ein");
        scanf("%f", &temp);
        if (pruefeGeldstueck(temp)){
            zuZahlen = zuZahlen - temp;
            eingeworfen = eingeworfen + temp;
            printf("\nRestbetrag: %.2f",zuZahlen);
            printf("\nbereits eingeworfen: %.2f",eingeworfen);
        }else{
            printf("\nungueltiges Geldstueck!");
        }
    }
    if(zuZahlen<0){
       printf("\nRueckgeld: %.2f",zuZahlen);
    }
}
 
mein Vorschlag

1c)
R
R
F
F
R
R
F
R
F
F

2)
CQPFEDBHKJIGMRONLA


3a

double ermittle_mw_rk(double *v, int pos)
{
double n = pos+1;

if (pos >= 0)
return (1 / n)*(ermittle_mw_rk(v, pos - 1)*(pos) + *(v+pos));
else
return 0;


}

c) sind ja die beiden punkte ^^

e)
hat bei dir keine Rückgabewerte
ausgabe erfolgt in der main()
Abbruchmöglichkeit durch 0 fehlt
 
Zu Aufgabe 2a) ist das Bild nicht länger verfügbar, daher hänge ich meinen Vorschlag rein.
Habe zur Übung noch in prä- und postordnung traversiert. Würde mich freuen wenn jemand kommentiert ob meine Lösungen stimmen, man vertut sich da so schnell...

Zu Aufgabe 2c)
Programmieren in C Kurseinheit 3 S. 97
Die Traversierung in Postordnung ist für die Auflösung
eines binären (Such-)Baumes geeignet. In diesem Fall sollten jeweils zuerst
der linke und rechte Teilbaum zu einem Knoten entfernt werden, bevor der Knoten
selbst gelöscht wird. Auf diese Weise wird ein Zugriff auf Adressen vermieden,
die sich in bereits entfernten Knoten befinden.
 

Anhänge

  • 16_17_2a.jpeg
    16_17_2a.jpeg
    110,3 KB · Aufrufe: 15
Zuletzt bearbeitet:
Zurück
Oben