C++ Klausur durchgefallen

B

blackpannther

hallo leute,
habe leider meine klausur verbockt.
habe ein riesen problem mit umsetzung der Aufgaben. Ich verstehe die Referenzen aber daraus ein prog zu erstellen, dafür bin ich glaube ich nicht gemacht.
habe hier eine Aufgabe von 5 die dran kamen ich weiß hat nichts mit c++ zutun, ist reines c aber das war in c++ dran.Meine Bitte ist, da ich in 1Monat die Nachklausur schreibe es zu verstehen was da passiert im source.
Wäre echt cool wenn ihr mir zeile für zeile erläutern könnt was da passiert. Ich habe das Prog durch den Compilier gejagt und bekomme das Endergebnis nur das bringt mir nichts.
Danke an die die mir zur Hand gehen wollen.
bye Blacky


wem es Interessiert hier die komplette Klausur!!


Aufgabe1
/* Geben Sie für folgendes Programm die Ausgaben an: */
#include <stdio.h>
struct zeiger {
double *p;
double *q; };

int main () {
struct zeiger z[2]; int i;
double daten[2][2] = {{5,10},{15,20}}, *tmp;
z[0].p = *daten;
z[0].q = daten[1];
z[1] = *z;
++(z[1].p);
z[1].q = daten[1] + 1;
tmp = z[0].p;
z[0].p = z[1].p;
z[1].p = tmp;
for (i = 0; i<2; i++)
printf("*z[%d].p: %f *z[%d].q: %f\n",i,*z.p,i,*z.q);
for (tmp = daten[0]; tmp <= &daten[1][1]; ++tmp)
tmp[0] = (tmp + 6) - daten[0];
(z+1)->p = --tmp;
z[0].p = (daten+1)[0];
(*z).q = (*(z+1)).p - 2;
*((*z).q) = 2 * *daten[0];
(*(&z[1])).q = z->q;
tmp = *(daten+1);
--(*(--tmp));
for(i = 0; i<2; ++1)
printf("*z[%d].p: %f *z[%d].q: %f\n",i,*z.p,i,*z.q);
return 0;
}



Aufgabe2
/*
In der Mathematik wird häufig mit Vektoren gerechnet. In dieser Aufgabe soll eine
Klasse Vektor betrachtet werden. Die Zahlenwerte sollen hierbei vom Datentyp double sein.
Schreiben Sie die Schnittstelle der Klasse Vektor, mit folgenden Eigenschaften und
Methoden auf:

- Private Eigenschaft: Vektor-Dimension.
- Private Datenhaltung der Zahlenwerte in einem dynamisch allozierten Feld.
- Ein Konstruktor, dem ein optionaler Parameter übergeben werden kann, der die
Vektor-Dimension angibt. Wird der Parameter nicht angegeeben, soll ein Vektor der
Größe 2 angelegt werden.
- Destruktor (bei bedarf). Begründen Sie Ihre Entscheidung.
- Copy-Konsttruktor (bei bedarf). Begründen Sie Ihre Entscheidung.
- Eine Methode setWert, die einen Integer- und einen Double-Wert übergeben bekommt.
An der durch den Integer-Wert bezeichneten Stelle wird der double-Wert eingetragen.
- Eine Methode getWert, die einen Integer-Wert übergeben bekommt, und den entsprechenden
double-Wert zurückgibt.
- Die +Operation, mit der die Addition von zwei Vektoren durchführt wird. Hierbei werden
jeweils die einzelnen Werte an einer bestimmten Vektor-Position addiert. Die Addition
funktioniert natürlich nur bei Vektoren mit gleicher Vektor-Dimension; ansonsten soll
ein Fehlermeldung ausgegeben werden.
- Die -Operation, die analog zur obigen Addition funktioniert.
- Die =Operation, die eine Zuweisung durchführt. Diese darf nur stattfinden, wenn beide
Operanten die gleiche Dimension besitzen. Ansonsten soll Fehlermeldung ausgegeben werden
und beide Operanten bleiben unverändert.
Implementieren Sie:
- Den Konstruktor.
- Die genannten drei Operatoren: +, - und = .
*/




Aufgabe3
/*
Um Werte zu sortieren, existieren mehrer Sortierverfahren. Eines davon ist der Bubblesort-Algorithmus.
Eine iterative Implementierung von Bubble-Sort mit zwei Prozeduren ist hier gegeben:
*/

void swap(int *a, int *b) { // Vertausche zwei int-Werte
int temp = *a;
*a = *b;
*b = temp;
}
// oneBubble() : bringt größtes Elem. nach ganz rechts!
void oneBubble(int *werte, int anzahle) {
int j;
for (j=0; j<anzahl-1; ++j)
if (werte[j]>werte[j+1])
swap(&werte[j],&werte[j+1]);
}
// bubbleSort() : bringt mittels oneBubble() zuerst größtes Elem.
// nach ganz rechts, dann zweit-größtes Elem. ein daneben, usw.
void bubbleSort(int *werte, int anzahl) {
int i;
for (i=0; i<anzahle; ++i)
oneBubble(werte, anzahl - 1);
}

/*
Überprüfen Sie die iterativen Prozeduren oneBubble() und bubbleSort() in rekursive
Prozeduren. Achten Sie auf folgende Randbedingungen:
- Die Schnittstellen der Prozeduren dürfen nicht verändert werden!
- Es darf innerhalb der Prozeduren kene Schleife mehr vorkommen!
*/





Aufgabe4
/*
In graphischen Systemen existieren verschiedene Klassen, durch die unterschiedliche
Graphische Primitive modelliert werden. Diese Klassen sind im Allgemeinen als eine
Klassenhierarchie aufgebaut. In dieser Aufgabe sollen Sie sich mit einem Ausschnitt
aus einer solchen Klassenhierarchie beschäftigen.
Implemtieren Sie die Klassen GraphikObj, Punkt, Rechteck und Kreis.
Alle diese Klassen sollen als Eigenschaft eine Position besitzen, die der Mittelpunkt
des jeweiligen Objektes ist. Neben der Position sollen die einzelnen Klassen folgende
Eigenschaften und Methoden besitzen:
- GraphikObj
Eine abstrakte Klasse, die folgende Methoden definiert:
a) distanz(): Der Abstand vom Null-Punkt. Nutzen Sie hierbei die Funktion sqrt(), mit
der Sie die Wurzel einer Zahl bestimmen können.
b) fläche(): Die Fläche des jeweiligen Objekts. Die Implementierung soll erst bei den
abgeleiteten Klassen erfolgen.
- Punkt
a) Besitzt eine Fläche der Größe 0
- Rechteck
a) Besitzt eine Länge und eine Breite.
b) Die Fläche berechnet sich als Länge * Breite.
- Kreis
a) Besitzt einen Radius
b) Die Fläche berechnet sich als pi*R*R(nutzen Sie 3.1415)
Alle Klassen sollen einen Konstruktor besitzen, der jeweils alle benötigten Werte
als Integer-Werte übergeben bekommt.





Aufgabe5
/*
In dieser Aufgabe soll eine Klasse LIFOStack für Integer-Werte entworfen und teilweise Implementiert werden.
Stacks dieser Klasse sollen beliebig viele Integer-Werte aufnehmen können. Die Klasse soll basierend auf
einer Liste arbeiten. Folgende ListenItem-Klasse soll hierbei genutzt werden:
*/
class ListItem{
public;
int wert;
LisrItem *next;
};
/*
Der Stack soll folgendermaßen funtionieren:
- Als private Eigenschaft wird ein Zeiger auf das erste Listenelement genutzt.
- Durch den Konstruktor wird dieser Zeiger auf NULL gesetzt.
- Bei push() soll ein neues Listenelement angelegt werden,in dem dann der entsprechende Wert abgespeichert
wird. Das bisherige erste Listenelement wird der Nachfolger des neuen Listenelements.
- Wenn bei pop() der Zeiger auf das erste Listenelement ungleich Null ist, wird der Wert aus dem ersten
Element als pop-Ergebnis genutzt und es wird das aktuelle erste Element freigegeben. Der Nachfolger des
aktuellen ersten Elements wird das neue erste Element.
Aufgabe:
- Geben Sie die komplette Schnittstelle der Klasse LIFOStack an.
- Überlegen Sie ob die Klasse LIFOStack einen Destruktor und einen Copy-Konstruktor braucht.
begründen Sie Ihre Entscheidung!
- Implementieren Sie folgende Methoden:
- Standard-Konstruktor
- push()
- pop()
*/
 
Hi Black

Ich denke es wuerde mehr Sinn machen du erarbeitest "deine" Loesung und gibst uns an wie du etwas verstehst und wir sagen dir dann, was du falsch interpretierst und warum.

Wenn du die Grundlagen nicht verstehst koennen wir dir auch nicht helfen, wiederrum solltest du mit den Grundlagen faehig sein, die Aufgaben zu loesen (aber ggf. natuerlich die Probleme ungeuebter Coder haben)..
 

Ähnliche Themen

Verschlüsseltes Backup-Script mit rsync

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

NagiosGrapher 1.7.1 funktioniert nicht

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

bash: Fehlermeldung und Werte in Array sortieren?

Zurück
Oben